The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

19.03.2017 11:23  Ошибка в GCC привела к игнорированию режима выявления проблем с форматированием строк

Разработчики Fedora Linux столкнулись с заслуживающей внимания проблемой, связанной с ненадлежащей работой предоставляемых в GCC дополнительных проверок для блокирования проблем, вызванных ошибками форматирования строки. Начиная с Fedora 21 пакеты в дистрибутиве собираются с опцией "-Werror=format-security", которая приводит к выводу ошибки в случае выявления компилятором GCC проблем с форматированием строк, которые потенциально могут привести к появлению уязвимостей.

В процессе тестирования новой ветки Fedora, в которой будет задействован GCC 7 (релиз GCC 7 ожидается в апреле), разработчики столкнулись с ошибкой, вызванной тем, что флаг "-Werror=format-security" игнорировался при определённом стечении обстоятельств. В итоге возникла ситуация когда массовая пересборка всех пакетов проходила без ошибок, но фактически сборка ряда пакетов должна была завершиться ошибкой, чего не произошло, и проблемы с форматированием строк в данных пакетах оставались незамеченными.

Проблема всплыла только после внесения в GCC 7 изменения, исправляющего ошибку разбора параметров командной строки (одновременное указание "-Werror=format-security" и "-Wall" или "-Wformat" приводило к игнорированию "-Werror=format-security"). Ошибка присутствует достаточно давно и проявлялась как минимум в ветке GCC 4. При обновлении GCC 7 некоторые пакеты в Fedora перестали собираться и уполномоченным разработчикам пришлось в экстренном порядке вносить правки (как правило замена printf(variable) на printf("%s", variable)), не дожидаясь реакции мэйнтейнеров.

Дополнительно можно отметить решение отложить альфа-выпуск Fedora 26 на одну неделю в связи с невыполнением критериев качества. В частности, в репозитории остаются неисправленными 4 проблемы, которые отнесены к категории блокирующих выпуск: проблемы с настройкой ssh-ключей в cloud-init, сбой в запуске gnome-initial-setup, если в инсталляторе не был добавлен пользователь, крах пакета с ядром на Allwinner SoC, проблемы с настройкой FreeIPA в инсталляторе. В качестве новой даты релиза Fedora 26 названо 20 июня, вместо изначально запланированного 6 июня. Напомним, что начиная с Fedora 27 подготовка альфа-выпуска будет упразднена.

  1. Главная ссылка к новости (https://lists.fedoraproject.or...)
  2. OpenNews: В DNS-сервере BIND устранен серьёзный сбой, возникший из-за изменений в оптимизаторе GCC
  3. OpenNews: Разработчики Mozilla столкнулись с проблемой производительности в GCC 4.5
  4. OpenNews: Линус Торвальдс выступил с резкой критикой GCC 4.9.0
  5. OpenNews: Оптимизация кода компилятором может привести к появлению проблем безопасности в приложениях
  6. OpenNews: Дэниэл Бернштейн выступил с инициативой создания Си-компилятора для защищённого ПО
Лицензия: CC-BY
Тип: Обобщение
Ключевые слова: gcc
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, Аноним (-), 11:43, 19/03/2017 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    А почему не на puts(variable)?
     
     
  • 2.6, фывфыв (?), 12:17, 19/03/2017 [^] [ответить]    [к модератору]
  • +10 +/
    Потому-что puts() добавляет '\n' в конце.
     
     
  • 3.25, ytrewq (?), 19:07, 19/03/2017 [^] [ответить]    [к модератору]
  • –7 +/
    не заблуждай, почитай ман вначале
     
     
  • 4.31, фывфыв (?), 22:39, 19/03/2017 [^] [ответить]     [к модератору]
  • +3 +/
    Не тупи, прочитай стандарт http www open-std org jtc1 sc22 wg14 www docs n154... весь текст скрыт [показать]
     
  • 2.28, Sabakwaka (ok), 20:26, 19/03/2017 [^] [ответить]    [к модератору]  
  • –2 +/
    >> А почему не на puts(variable)

    Потому, что строковая строка?

     
  • 2.30, Я (??), 22:01, 19/03/2017 [^] [ответить]    [к модератору]  
  • –4 +/
    Потому что компилятор сам заменит printf() на puts()
     
     
  • 3.42, Мальчикдевопс (?), 10:17, 20/03/2017 [^] [ответить]    [к модератору]  
  • +/
    но только если в конце printf есть '\n'
     
  • 1.5, Аноним (5), 12:13, 19/03/2017 [ответить] [показать ветку] [···]     [к модератору]  
  • –12 +/
    у gcc вообще основная фича, в том что они косячут и годами эти ошибки не хотят и... весь текст скрыт [показать]
     
     
  • 2.7, freehck (ok), 12:20, 19/03/2017 [^] [ответить]     [к модератору]  
  • –2 +/
    Ммм, как интересно А может быть проблема в том, что Fedora, которая испытательн... весь текст скрыт [показать]
     
     
  • 3.10, нонанон (?), 12:33, 19/03/2017 [^] [ответить]     [к модератору]  
  • +5 +/
    Ну сказано же ну Ошибка присутствует достаточно давно и проявлялась как миниму... весь текст скрыт [показать]
     
     
  • 4.15, freehck (ok), 13:25, 19/03/2017 [^] [ответить]     [к модератору]  
  • –1 +/
    На то он и тестируемая ветвь компилятора, чтобы выявлять вот такие вот баги Да,... весь текст скрыт [показать]
     
     
  • 5.16, Аноним (-), 13:46, 19/03/2017 [^] [ответить]    [к модератору]  
  • +/
    Короче, мы вас поняли, все версии gcc с 4 по 7 - тестовый полигон, косяки в них не считаются.
     
  • 4.19, Аноним (-), 14:16, 19/03/2017 [^] [ответить]    [к модератору]  
  • +3 +/
    Ошибка в том что компилировалось, хотя не должно было. А в GCC 7 исправили. И теперь не компилится.
     
     
  • 5.44, Michael Shigorin (ok), 11:07, 20/03/2017 [^] [ответить]     [к модератору]  
  • +2 +/
    Как там было у Немет если программа собралась с первого раза -- позовите систе... весь текст скрыт [показать]
     
  • 4.20, Аноним (-), 14:31, 19/03/2017 [^] [ответить]    [к модератору]  
  • +2 +/
    До этой части что не позволило дочитать?
    > Проблема всплыла только после внесения в GCC 7 изменения, исправляющего ошибку разбора параметров командной строки
     
  • 1.23, Аноним (-), 15:19, 19/03/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –3 +/
    > в которой будет задействован GCC 7 (релиз GCC 7 ожидается в апреле),

    Я правильно понял: взяли сырой билд и надулись, что он не работает как стабильный релиз?

     
     
  • 2.24, axredneck (?), 16:45, 19/03/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    С gcc 4, 5, 6 та же проблема
     
  • 2.26, Аноним (-), 19:20, 19/03/2017 [^] [ответить]    [к модератору]  
  • +1 +/
    Наоборот, в GCC 7 поправили древний баг и после этого в Fedora перестала собираться куча пакетов.
     
     
  • 3.27, Аноним (-), 20:06, 19/03/2017 [^] [ответить]     [к модератору]  
  • –2 +/
    Руководи Линус разработкой gcc, он бы откатил этот патч, как это было сделано не... весь текст скрыт [показать]
     
     
  • 4.33, Аноним (-), 23:46, 19/03/2017 [^] [ответить]    [к модератору]  
  • +/
    Эти пакеты не должны были собираться с опцией "-Werror=format-security", так как в них был кривой код, на который эта опция обязана выдавать ошибку.
     
     
  • 5.43, Аноним (-), 10:36, 20/03/2017 [^] [ответить]    [к модератору]  
  • +/
    https://linux.slashdot.org/story/09/07/29/1925224/alan-cox-quits-as-linux-tty- (там есть ссылка на lkml.org)
     
  • 3.29, RobotsCantPoop (?), 21:09, 19/03/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    А если в GCC исправить все баги, то перестанет собираться вообще всё?
     
     
  • 4.39, nobody (??), 09:47, 20/03/2017 [^] [ответить]     [к модератору]  
  • –2 +/
    Не исключено - В мире GNU во всяком случае Ну а вообще в MS VC всё ещё хуже... весь текст скрыт [показать]
     
     
  • 5.51, Аноним (-), 15:35, 20/03/2017 [^] [ответить]    [к модератору]  
  • –1 +/
    Зачем MS какие-то стандарты? Они сами - стандарт!
     
     
  • 6.56, nobody (??), 09:59, 21/03/2017 [^] [ответить]     [к модератору]  
  • +/
    Вот слава Аллаху, что эти времена проходят Сейчас осталось только две программн... весь текст скрыт [показать]
     
  • 5.55, Led (ok), 00:46, 21/03/2017 [^] [ответить]    [к модератору]  
  • +1 +/
    > Поглядим, что из этого выйдет

    Вендузятник должен не поглядеть, а страдать.


     
  • 3.49, анонимус вульгарис (?), 14:27, 20/03/2017 [^] [ответить]    [к модератору]  
  • +/
    Нет, поправили древний баг, после чего стала собираться кучка пакетов с дырявым кодом, который должен был зафейлить сборку.
     
  • 1.34, Аноним (-), 04:26, 20/03/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    > printf(variable) на printf("%s", variable))

    Что за адский хардкодер лабает такие вещи?

     
     
  • 2.35, Аноним (-), 05:37, 20/03/2017 [^] [ответить]    [к модератору]  
  • +/
    Больше чем ты думаешь. Такое даже в sudo находили (кажется было в отладочных сообщениях, включалось через -vvvvvv).
     
  • 1.40, nobody (??), 09:50, 20/03/2017 [ответить] [показать ветку] [···]     [к модератору]  
  • –3 +/
    То есть больше 10 лет баги никто не видел, с ними выпускали релизы, а тут вдруг ... весь текст скрыт [показать]
     
  • 1.41, anonymous (??), 09:53, 20/03/2017 [ответить] [показать ветку] [···]     [к модератору]  
  • –3 +/
    а так же стопятьсот избыточных, повторяющихся и взаимно-противоречивых опций, ко... весь текст скрыт [показать]
     
  • 1.45, snmp agent (?), 13:04, 20/03/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –2 +/
    Интересно, я один не врубался, о каких "проблемах с форматированием строк" речь, пока не посмотрел в man gcc?
     
     
  • 2.50, анонимус вульгарис (?), 14:32, 20/03/2017 [^] [ответить]    [к модератору]  
  • +/
    Рекомендую почитать:
    https://www.securecoding.cert.org/confluence/display/c/FIO30-C.+Exclude+user+i
    Там ещё много интересного.
     
  • 2.53, Аноним (-), 18:42, 20/03/2017 [^] [ответить]     [к модератору]  
  • +3 +/
    Нет, вас таких много https www cvedetails com google-search-results php q for... весь текст скрыт [показать]
     
  • 1.48, Аноним (-), 14:04, 20/03/2017 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    Уж сколько лет известно об printf format string уязвимостях, а люди упорно используют printf даже в С++ программах, вместо iostreams.
     
     
  • 2.54, freehck (ok), 21:39, 20/03/2017 [^] [ответить]    [к модератору]  
  • +/
    Ну так уязвимости форматных строк - сродни XSS в браузерах. Не давайте пользователю заполнять формат, и всё будет хорошо.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor