ГлавнаяБаза уязвимостей БДУ → BDU:2024-03781
9высокая

BDU:2024-03781 (CVE-2008-1685)

Уязвимость набора компиляторов для различных языков программирования GNU Compiler Collection (GCC), связанная с некорректной обработкой суммы указателя и целого числа, позволяющая нарушителю вызвать отказ в обслуживании или оказать иное воздействие
Опубликовано: 2024-05-16
Описание

Уязвимость набора компиляторов для различных языков программирования GNU Compiler Collection (GCC) связана с некорректной обработкой суммы указателя и целого числа как большую или равную указателю без использования преобразований, что может привести к непреднамеренному удалению кода проверки длины. Эксплуатация уязвимости может позволить нарушителю, действующему удаленно, вызвать отказ в обслуживании или оказать иное воздействие

Затрагиваемое ПО и версии
GNU Compiler Collection (от 4.2.0 до 4.3.0 включительно)
Способ устранения

Установка обновлений из доверенных источников.
В связи со сложившейся обстановкой и введенными санкциями против Российской Федерации рекомендуется устанавливать обновления программного обеспечения только после оценки всех сопутствующих рисков.

Компенсирующие меры:
1. Использование предупреждений: Активация предупреждений с помощью опции -Wstrict-overflow=N (где N >= 3), что позволяет выявить потенциально уязвимые места в коде.

2. Настройка оптимизаций: Контроль оптимизаций с использованием опций -fstrict-overflow и -fno-strict-overflow для настройки поведения компилятора в отношении переполнения указателей. Опция -fstrict-overflow позволяет включить оптимизации переполнений на уровне -O1, что повышает производительность, но с риском возникновения ошибок. Опция -fno-strict-overflow, наоборот, отключает эти оптимизации для уровней -O2 и выше, что делает компиляцию более безопасной за счет отказа от рискованных оптимизаций.

3. Приведение объектов типа char* к uintptr_t перед сравнением.
Пример:
#include <stdint.h>
[...]
if((uintptr_t)buf + len < (uintptr_t)buf) {
[...]
}
Приведение указателей к целочисленному типу uintptr_t позволяет избежать некорректных сравнений, связанных с переполнением. Использование uintptr_t гарантирует, что сравнение будет корректным, даже если сумма указателя и длины приведет к переполнению.

4. Использование типа size_t на платформах, где uintptr_t недоступен.
#include <stddef.h>
[...]
if((size_t)buf + len < (size_t)buf) {
[...]
}
Тип size_t предназначен для представления размеров объектов. На платформах без поддержки uintptr_t, использование size_t позволяет избежать ошибок, связанных с переполнением указателей, обеспечивая корректное сравнение.

5. Следование правилам безопасного кодирования, описанным в руководстве CERT C Secure Coding, в частности, правилу ARR38-C.

Использование рекомендаций производителя:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=26763

Оценка CVSS
Балл9 — высокая опасность
Источники и патчи
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26763http://www.kb.cert.org/vuls/id/162289https://exchange.xforce.ibmcloud.com/vulnerabilities/41686https://ubuntu.com/security/CVE-2008-1685https://launchpad.net/bugs/cve/CVE-2008-1685https://www.cve.org/CVERecord?id=CVE-2008-1685
Проверьте безопасность своего сайта и почты → Полная проверка домена