
Доказательство концепции эксплуатации разыменования нулевого указателя в ядре Linux в функции icmp_tag_validation(), позволяющее удалённый отказ в обслуживании с помощью специально сформированных ICMP-пакетов.
Разыменование нулевого указателя в icmp_tag_validation() ядра Linux (удалённый DoS)
Функция icmp_tag_validation() в net/ipv4/icmp.c разыменовывает inet_protos[proto] без проверки на NULL. Удалённый злоумышленник может отправить один специально сформированный ICMP-пакет Fragmentation Needed с незарегистрированным номером внутреннего протокола, чтобы вызвать крах ядра в контексте softirq.
Затронуты: ядро Linux до коммитов 614aefe56af8 (mainline) / d938dd5a0ad7 (stable 6.12)
sudo python3 poc.py --target <TARGET_IP> # одиночный пакет, proto 253
sudo python3 poc.py --target <TARGET_IP> --proto 252 # альтернативный незарегистрированный proto
sudo python3 poc.py --target <TARGET_IP> --count 5 # повтор
net.ipv4.ip_no_pmtu_disc = 3 (не значение по умолчанию; требуется для достижения icmp_tag_validation())Этот проект распространяется под лицензией GNU GPLv3.
Он предоставляется для оборонительных исследований в области безопасности, обучения и авторизованного тестирования. Не используйте этот код против систем или сервисов без явного разрешения владельца.
Несанкционированное использование может нарушать действующее законодательство. Авторы не дают разрешения на тестирование сторонних систем и не несут ответственности за неправомерное использование.
Условия гарантии и ответственности см. в файле LICENSE.