GNU IFUNC — настоящий виновник CVE-2024-3094, а вовсе не XZ

Разработчик нарыл, что корень уязвимости CVE-2024-3094 — не только в XZ, но и в древнем механизме IFUNC, который позволяет подменять функции на лету.
Помните скандал с CVE-2024-3094, из-за которого весь интернет перетряхивал свои XZ-библиотеки? Оказывается, настоящий злодей — не сам XZ, а древний механизм GNU IFUNC, который словно дверь без замка в мире ELF-бинарников.
Исследователь Роберт Френч ткнул пальцем в IFUNC и обнаружил, что эта фича, предназначенная для выбора оптимальной реализации функции под конкретный процессор, идеально подходит для внедрения бэкдоров. Это как если бы в вашем автомобиле был штатный люк для доступа механика, а кто-то использовал его для угона.
Суть в том, что IFUNC позволяет динамически выбирать, какую версию функции загрузить — и злоумышленник может подсунуть свою вредоносную версию, которая обходит все проверки. В случае с XZ, бэкдор использовал IFUNC для перехвата вызовов OpenSSH, и это оставалось незаметным для стандартных анализаторов.
Разработчикам стоит задуматься: сколько ещё «удобных» механизмов в наших тулчейнах на самом деле являются бомбами замедленного действия? IFUNC — мощный инструмент, но без контроля он превращается в кошмар безопасности. Как говорится, с большой силой приходит большая ответственность (и много костылей).
Комментарий студии METABYTE: Мы всегда говорили, что безопасность — это не фича, а процесс. Если ваш код использует IFUNC или подобные «магические» механизмы, не поленитесь провести аудит — иначе однажды вы рискуете обнаружить, что ваш «оптимизированный» бинарник уже давно работает на дядю.