На состоявшемся заседании комитета FESCo (Fedora Engineering Steering Committee), отвечающего за техническую часть разработки дистрибутива Fedora Linux, было утверждено (https://lists.fedoraproject.org/pipermail/devel/2013-Novembe...) решение по включению по умолчанию флага "-Werror=format-security" при сборке всех пакетов дистрибутива. Использование данного флага приводит к выводу ошибки в случае выявление компилятором GCC проблем с форматированием строк, которые потенциально могут привести к появлению уязвимостей. В настоящее время подобные проблемы зафиксированы (https://fedoraproject.org/wiki/Changes/FormatSecurity) приблизительно в 400 пакетах из состава репозиториев Fedora Linux.URL: https://lists.fedoraproject.org/pipermail/devel/2013-Novembe...
Новость: http://www.opennet.me/opennews/art.shtml?num=38544
Сначала я подумал, что они хотят бороться с невнимательными разработчиками бамблби (или кто там с помощью лишнего пробела в скрипте корень удалял?).
А потом совсем не понял...
printf(%i,&data); С таким бороться что ли будут? И как?
Кто в курсе произошедшей драмы?
Эй, парсер! А ну отдал обратно кавычки! Бегом!
:)
printf(str);В str может не оказаться null-терминального символа. А как бороться собрались ХЗ.
> А как бороться собрались ХЗ.средствами GCC же. Что разумно.
Ты удивишься, ноprintf("%s", str);
в str тоже может не оказаться null-терминального символа.
Смысл уязвимостей форматной строки в другом - в printf(str) в str могут оказаться произвольные символы форматирования, благодаря чему можно читать память процесса.
Видимо, будут добавлять printf_s и scanf_s а ля студия. И депрекейтить старые версии.
> А как бороться собрались ХЗ.Главное не победа, а участие ;)
кроме printf может быть scanf
Кроме scanf могут быть все функции, использующие форматные строки.
Что, man gcc набрать и поиск по / сделать религия запрещает?-Wformat-security
If -Wformat is specified, also warn about uses of format functions that represent
possible security problems. At present, this warns about calls to "printf" and
"scanf" functions where the format string is not a string literal and there are no
format arguments, as in "printf (foo);". This may be a security hole if the format
string came from untrusted input and contains %n. (This is currently a subset of
what -Wformat-nonliteral warns about, but in future warnings may be added to
-Wformat-security that are not included in -Wformat-nonliteral.)
По-хорошему это должно быть в тексте новости.
А то так можно дойти и до пустых сообщений вместо новостей -- мол, тот, кому интересно, сам найдёт:)
> А то так можно дойти и до пустых сообщений вместо новостей —
> мол, тот, кому интересно, сам найдёт:)это было бы идеально. потому что неуважаемые пиривотчики новостей здесь английский понимают примерно на уровне моих котов, и поэтому в большинстве случаев новости творчески сочиняют. в итоге хорошо, если получается хотя бы «не совсем то» — но часто получается и вовсе по смыслу противоположное оригиналу.
Кстати, ты вручную в цитируемом тексте заменяешь двойной дефис на длинное тире?
> Кстати, ты вручную в цитируемом тексте заменяешь двойной дефис на длинное тире?нет, конечно: у меня userjs, который все поля ввода обрабатывает. вписывать туда исключение для опеннетовских цитат мне лень, поэтому цитаты он тоже правит. может, когда-нибудь лень поборю и добавлю фичку.
>> Кстати, ты вручную в цитируемом тексте заменяешь двойной дефис на длинное тире?
> нет, конечно: у меня userjs, который все поля ввода обрабатывает.А замену ":)" и ":-)" на анимированные смайлики он поддерживает?
и канкан пляшет.
О, чувак, выложи в паблик, плз! Очень нужно.
> О, чувак, выложи в паблик, плз! Очень нужно.ну вот щаз. тогда у всех канкан будет — и чем я такой особенный стану?!
Дык - толщиной! :)
Его пипетка то?
Не пипетка, а горизонтальный габарит. Недаром его уже останавливали инспектора гибдд и рекомендовали носить в руках по флажку, чтобы обозначить боковые габариты. Несмотря на то, что он пешеход.
man gcc не соответствует DFSG, и выпилен :-)
> man gcc не соответствует DFSG, и выпилен :-)Что, даже из non-free не поставить?
Не корень. Всего-то /usr
> Не корень. Всего-то /usrНу да, это сильно меняет дело. Потери /usr система даже не заметит.
лучше бы просто -Werror добавили
-Werror -ansi -pedantic ибо нех..я выйопываться
> -Werror -ansi -pedantic ибо нех..я выйопываться-pedantic-erros забыл. И -ansi - не лучшее решение, лучше -std=c99
> -std=c99-std=gnu99. больные на голову пуристы идут по грибы.
>> -std=c99
> -std=gnu99. больные на голову пуристы идут по грибы.GNU вендорлок такой не вендорлок...
> GNU вендорлок такой не вендорлок…если на твоей системе нет gcc — то это такая яростная маргинальщина, что проблемы её двух с половиной пользователей вообще никого не интересуют.
>> GNU вендорлок такой не вендорлок…
> если на твоей системе нет gcc — то это такая яростная маргинальщина,msvc - это не маргинальщина, а мейнстрим. И что важно - никаких вендор-локов, все открыто и свободно!
> msvc - это не маргинальщина, а мейнстрим.на винде есть mingw. мимо кассы.
Стандарты de facto - это всегда плохо. Если gnu99(или gnu11) станет стандартом de jure, я буду только за. Но до того - спасибо, не надо.
> Стандарты de facto - это всегда плохо.я как-то старый уже, и считаю, что суббота для человека, а не человек для субботы. расширения гну облегчают мне жизнь, и поэтому я их использую. а то, что их не внесли в официальный стандарт… да пофиу. gcc есть везде. а в стандарты вносят в основном бесполезный идиотизм.
Окей. Вся наша жизнь - борьба. Представляю батхерт у нечистоплотных авторов апстрима, когда к ним такие патчи придут. Компайл-тайм анализ - это хорошая штука на настоящий момент, достаточно проработанная и ненапряжная для конечных пользователей. В связи с конкуренцией компиляторов (clang, gcc) и такими вот административными мерами, массово улучшается код прикладных программ.Пусть пока это и довольно формально, логические баги в ПО это не пофиксит, но заставляет программистов держаться в тонусе и меньше говнокодить.
В Mandriva/ROSA/Mageia уже много лет этот флаг по умолчанию используется, а Fedora что-то только сейчас "созрела"...
Видимо только Mandriva/ROSA/Mageia не потрудились вернуть в апстрим исправления для приложений, позволяющие их собрать с этим флагом. В отличие от федоры, которая обычно это пробивает (тоже не всегда, но по моим наблюдениям чаще). Иначе чем можно объяснить 400 пакетов, которые отказались собираться в федоре после включения флага? Не тем же, что их вообще нет в мандриве (по моим наблюдениям, пакетная база у них точно не уступает федоре).Так что даже если мандрива была первой, а федора созрела только сейчас, важнее, чтобы нашли ошибки и исправили их в апстриме. Флаг gcc - не самоцель, куда важнее отсутствие багов..
Да, есть такое - именно этот тип патчей в апстрим никогда не отправлял, хотя не один десяток написал за несколько лет... Из-за представления, что там это никому не надо, иначе бы сами уже давно поправили (это тривиально делается и быстро).
> Да, есть такое - именно этот тип патчей в апстрим никогда не отправлялА этот тип случайно не думал пойти работать в каноникал? Там такое любят.
> Да, есть такое - именно этот тип патчей в апстрим никогда не отправлялКак будто "другой тип" - кто-то отправлял... ROSA-же, какой еще тут "апстрим"?
В чем новость-то, собственно? Эта опция включена официально в Debian Wheezy:
https://wiki.debian.org/ReleaseGoals/SecurityHardeningBuildF...Вот статистика:
http://outflux.net/debian/hardening/
Учитывая комбинацию флагов по-умолчанию - получается что около ~40% библиотек собрано с данной опцией. Конечно, в первую очередь, попадающие под описание данной release goal (пакеты приоритета important и выше, имеющие DSA в течение последних 5 лет и т.п.). Репозитарии Федоры - капля в этом море.И да, "этот тип патчей" - регулярно отправляют в апстрим, можете проверить по истории багов.
> Видимо только Mandriva/ROSA/Mageia не потрудились вернуть в апстрим исправления для приложений
Я что-то пропустил и Fedora уже успела потрудиться, толком даже не исправив своих FTBFS (подавляющая часть которых давно исправлена тем же Debian)?
> Как будто "другой тип" - кто-то отправлял... ROSA-же, какой еще тут "апстрим"?Регулярно отправляются патчи из Росы в апстрим.
https://bugs.kde.org/show_bug.cgi?id=327455
и т.д. и т.п.
> https://bugs.kde.org/show_bug.cgi?id=327455
> и т.д. и т.п.Я не вижу как этот баг вообще связан с росой. И т.д. и т.п.
Для сравнения, пример бага:
http://trac.nginx.org/nginx/ticket/334
> Я не вижу как этот баг вообще связан с росойЭто уже похоже на троллинг. Если один из мейнтейнеров Росы заводит баг, появившийся в Phonon 4.7.0 по невнимательности разработчика из апстрима, чтобы отправить свой патч разработчику, то этот баг с Росой никак не связан? Нда уж...
> Если один из мейнтейнеров Росы заводит багЯ не вижу там мейнтейнера Росы. Прикажете опознавать его по нику, известному какой-то приватной тусовке?
Вообще-то там тот же ник, что и здесь. И почему-то выше в треде навыков опознания ников хватило, чтобы написать мне "ROSA-же, какой еще тут "апстрим"". Смешно же...
> Учитывая комбинацию флагов по-умолчанию - получается что около ~40% библиотек собрано с
> данной опцией. Конечно, в первую очередь, попадающие под описание данной
> release goal (пакеты приоритета important и выше, имеющие DSA в течение
> последних 5 лет и т.п.). Репозитарии Федоры - капля в
> этом море.40% библиотек дебиана - это сопоставимо с репами федоры. А остальные 60% просто dead/unmaintained.
> И да, "этот тип патчей" - регулярно отправляют в апстрим, можете проверить по истории багов.
Пруфы в студию!
> Я что-то пропустил и Fedora уже успела потрудиться, толком даже не исправив
> своих FTBFS (подавляющая часть которых давно исправлена тем же Debian)?Попытка запуска apt-build world на почти любой реальной системе наглядно показывает, что FTBFS - это девиз проекта Debian.
>> И да, "этот тип патчей" - регулярно отправляют в апстрим, можете проверить по истории багов.
> Пруфы в студию!Желательно хотя бы по четверти из этих 40%, т.е. 10% библиотек дебиана.
> Желательно хотя бы по четверти из этих 40%, т.е. 10% библиотек дебиана.Щас брошу работу и буду убогим объяснять как пользоваться bts и учить читать.
Вот для примера баг:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=642591
> Вот для примера баг:
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=642591Один-единственный случай - это, конечно, сильный аргумент.
> Один-единственный случай - это, конечно, сильный аргумент.Повторяю, ради придурка, который не умеет читать самостоятельно предложенные материалы - мне не интересно тратить время на большее. Интересно - читай предложенные ссылки, собирай подробную статистику. Пакетов, содержащих только C/C++ код - что-то под 8k во Wheezy. Удачи.
> 40% библиотек дебиана - это сопоставимо с репами федоры.Возможно. Если судить по общему соотношению пакетов, f19 - вроде бы 14504. Это ~40% от общего числа пакетов Debian Wheezy.
Вот только в Debian это уже было сделано два года назад...
> А остальные 60% просто dead/unmaintained.
Прям так валшебным образом попадают в релиз, минуя сборку buildd и проч. Дети такие наивные...
>> И да, "этот тип патчей" - регулярно отправляют в апстрим, можете проверить по истории багов.
> Пруфы в студию!Зачем тратить время на того, кто не смог изучить подсунутые под нос баги?
>> Я что-то пропустил и Fedora уже успела потрудиться, толком даже не исправив
>> своих FTBFS (подавляющая часть которых давно исправлена тем же Debian)?
> Попытка запуска apt-build world на почти любой реальной системе наглядно показывает, что
> FTBFS - это девиз проекта Debian.На "реальных системах" не используют заброшенные пакеты, а пользуются нормальными инструментами для установки/сборки. И тем более, не превращают бинарный дистрибутив в недогенту.
>> 40% библиотек дебиана - это сопоставимо с репами федоры.
> Возможно. Если судить по общему соотношению пакетов, f19 - вроде бы
> 14504. Это ~40% от общего числа пакетов Debian Wheezy.Ага. Осталось еще сопоставить общее количество пакетов с количеством _библиотек_.
> Прям так валшебным образом попадают в релиз, минуя сборку buildd и проч.
Да. Это особая, дебиановская магия.
> Зачем тратить время на того, кто не смог изучить подсунутые под нос баги?
Раз так уж жалко времени - признайтесь, что случаи отправки патчей из дебиана в апстрим носят единичный характер.
В противном случае вам придется доказывать обратное.> На "реальных системах" не используют заброшенные пакеты, а пользуются нормальными инструментами для установки/сборки. И тем более, не превращают бинарный дистрибутив в недогенту.
apt-build использует какой-то особый, заброшенный gcc?
>>> 40% библиотек дебиана - это сопоставимо с репами федоры.
>> Возможно. Если судить по общему соотношению пакетов, f19 - вроде бы
>> 14504. Это ~40% от общего числа пакетов Debian Wheezy.
> Ага. Осталось еще сопоставить общее количество пакетов с количеством _библиотек_.Имбецил? Да, я так прямо и написал - сравниваю соотношение общего количества пакетов, для оценки. Если у тебя есть статистика по пакетам c бинарниками в федоре - озвучь ее, мне искать/собирать ее лень. Для Debian я показал даже графики. Картинки! Читать не надо - и ты таки не осилил?
>> Прям так валшебным образом попадают в релиз, минуя сборку buildd и проч.
> Да. Это особая, дебиановская магия.Да ты, наверно, еще и Деда Мороза веришь?
>> Зачем тратить время на того, кто не смог изучить подсунутые под нос баги?
> Раз так уж жалко времени - признайтесь, что случаи отправки патчей из
> дебиана в апстрим носят единичный характер.Зачем мне врать? Это норма, а не исключение.
> В противном случае вам придется доказывать обратное.
Зачем?
>> На "реальных системах" не используют заброшенные пакеты, а пользуются нормальными инструментами для установки/сборки. И тем более, не превращают бинарный дистрибутив в недогенту.
> apt-build использует какой-то особый, заброшенный gcc?apt-build не является штатным инструментом для сборки пакетов для Debian. Это полурабочая утилита для пришедшей из всяких гент школоты. Больше никому она не нужна, даже мейнтейнер уже давно наигрался...
Это гуд!
Попробовал:1: #include <stdio.h>
2: int main()
3: {
4: double d = 1.5;
5: printf("%d\n", d);
6: return 0;
7: }Если компилить без "-Wformat -Wformat-security", то компиляция пройдет нормально.
С этими опциями будет предупреждение на строке 5.
молодец. а теперь приучись собирать проекты с -Wall.
Наше кредо - ВСЕГДА!
> Наше кредо - ВСЕГДА!тогда я не понимаю, чему ты так удивлён.
-W -Wall -Werror -pedantic после чего долго офигевать от того насколько криво пишут софт :-)hint - ядро Linux с этими флагами не соберется.
Интересно. В mingw с gcc 4.6.2 под форточками этот пример собирается без всяких ошибок
gcc --version
gcc.exe (GCC) 4.6.2
Copyright (C) 2011 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая
коммерческую ценность и применимость для каких-либо целей.cat test1.c
#include <stdio.h>int main (int argc, char *argv[]){
double d = 1.5;
printf("%d\n", d);
return 0;
}make
cc -g -std=c99 -Wall -Werror -pedantic -pedantic-errors -Wformat -Wformat-security test1.c -o test1test1.exe
0
$ gcc --version
gcc.exe (GCC) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.$ cat test.c
int main (int argc, char *argv[]){
double d = 1.5;
printf("%d\n", d);
return 0;
}$ gcc -std=c99 -Wall -Werror -pedantic -pedantic-errors -Wformat -Wformat-security test.c -o test
test.c: In function 'main':
test.c:3:3: error: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
printf("%d\n", d);
^
test.c:3:3: error: incompatible implicit declaration of built-in function 'printf' [-Werror]
test.c:3:3: error: format '%d' expects argument of type 'int', but argument 2 has type 'double' [-Werror=format=]
cc1.exe: all warnings being treated as errors
> -Wall -Werror -pedantic -pedantic-errors -Wformat -Wformat-security-Wall вроде уже включает -Wformat?
Если есть -pedantic-errors, то зачем ещё и -pedantic? для драматизма?
-Wextra ещё можно добавить
-Werror=format-securityЩа программеры начнут любыми способами убирать эти ошибки,
вплоть до тупейшего явного преобразования типов, лишь бы собралосьprintf("%d", (int)1.0f):
Короча, ждём новых дыр в фидоре!
> Ща программеры начнут любыми способами убирать эти ошибки,
> вплоть до тупейшего явного преобразования типов, лишь бы собралосьа ведь так и будет…
>> Ща программеры начнут любыми способами убирать эти ошибки,
>> вплоть до тупейшего явного преобразования типов, лишь бы собралось
> а ведь так и будет…намек на OpenSSL & Debian? от которого теперь пол интернету икается :-)
> намек на OpenSSL & Debian? от которого теперь пол интернету икается :-)Это же знаменитый проект Debian Security Hardening!
И еще хорошо, что конкретно этот патч они поленились в апстим пропихивать...
> -Werror=format-security
> Ща программеры начнут любыми способами убирать эти ошибки,
> вплоть до тупейшего явного преобразования типов, лишь бы собралось
> printf("%d", (int)1.0f):
> Короча, ждём новых дыр в фидоре!да лана.. разве могут православные GNU программисты так поступать? там же сплошь профессионалы котоые одним глазом все ошибки замечают :)
>> Короча, ждём новых дыр в фидоре!
> да лана.. разве могут православные GNU программисты так поступать? там же сплошь
> профессионалы котоые одним глазом все ошибки замечают :)Хер бы с фидорой, но эти школьники тянут свои гадкие ручёнки почти ко всем проектам.
Суют корявые патчи в багтрекеры. Хорошо если майнтейнер проекта адекватный и есть время
для проверки. А если ленивый? Увидит, что 25 фидорасов щастливы от этого патча и пустит
в мэйнстрим.
Набежало петросянов...
По большей части самое опасное это:
1) прямой ввод-вывод форматных строк вида printf(s)
2) несоответствие размеров аргументов
да вы че, смеетесь, зачем это в новостях
федора компиляет с новым флагом(и отнюдь не самым-самым), о-ло-ло, сенсация, зачем только по ссылке ходил
> федора компиляет с новым флагом(и отнюдь не самым-самым), о-ло-ло, сенсация, зачем только по ссылке ходилФедора, пфф! Вот когда Убунта даже не компиляет, а только собирается запланировать возможно начать компилять - это сенсация мирового уровня!