Уязвимость набора компиляторов для различных языков программирования GNU Compiler Collection (GCC) связана с некорректной обработкой суммы указателя и целого числа как большую или равную указателю без использования преобразований, что может привести к непреднамеренному удалению кода проверки длины. Эксплуатация уязвимости может позволить нарушителю, действующему удаленно, вызвать отказ в обслуживании или оказать иное воздействие
Установка обновлений из доверенных источников.
В связи со сложившейся обстановкой и введенными санкциями против Российской Федерации рекомендуется устанавливать обновления программного обеспечения только после оценки всех сопутствующих рисков.
Компенсирующие меры:
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
| Балл | 9 — высокая опасность |