ai-security

Битая картинка могла вскрыть Slack, Meta и GitHub

Promtime

ai-security

Чтобы доказать, что они внутри, исследователи не стали читать чужой код: они попросили Codex захваченного сотрудника OpenAI открыть пулреквест #1186742 во внутреннем монорепозитории openai/openai. Путь туда начался с картинки, загруженной на форум поддержки, и это один эпизод из целого класса атак, который Hacktron назвала HEIF Heist и описала на Heif-heist.

Коротко

  • Речь про сервисы, которые принимают от пользователя HEIF, HEIC или AVIF: уязвимость сидит не в коде приложения, а в нативных декодерах на C/C++, прежде всего в libheif и libde265.
  • Hacktron перечисляет, что баг мог дать: выгрузку приватных репозиториев OpenAI, RCE в Slack с утечкой файлов, RCE в основных продуктах Meta, RCE в GitHub Enterprise (CVE-2026-19118) и неаутентифицированный RCE в Next.js через оптимизацию AVIF.
  • Готовых эксплойтов нет: сначала снимают отпечаток версии libheif на сервере, потом собирают картинку ровно под неё, а часть RCE сработала только после тысяч загруженных файлов.

Если вы не следили: парсеры картинок ломают не первый раз. Hacktron сама вспоминает ImageTragick, ForcedEntry и дыру в libwebp. По данным Jsmon.sh, ImageTragick (CVE-2016-3714) в 2016 году давал выполнить код на сервере обычной загрузкой файла, потому что ImageMagick вшит в множество веб-фреймворков. А уязвимость libwebp 2023 года, как пишет Snyk, получила оценку CVSS 9,6 и разошлась по браузерам на Chromium, операционным системам и контейнерам как прямая и транзитивная зависимость.

Discourse отдавал HEIC в ImageMagick, а Debian 12 привозил libheif 1.19.7

23 июля 2026 года команда разбирала пайплайн загрузок в Discourse и заметила, что HEIC и HEIF идут особым маршрутом. Проверкой картинок обычно занимался FastImage, но HEIF он не поддерживает, поэтому такие файлы уходили в команду magick из ImageMagick. Так пользовательский файл попадал прямо в libheif.

Как команда пишет в разборе «Hacking OpenAI», сессия Opus 4.8 с докер-образом Discourse нашла, что часть правок безопасности в пакет libheif не бэкпортировали: при декодировании HEIC получалось переполнение кучи с чтением и записью за границами буфера. Апстрим поменял этот код годом раньше, но коммит не был помечен как security-фикс и CVE не получил. Образ Discourse собран на Debian 12 и ставил libheif 1.19.7; в Debian 13 тогда лежала уязвимая 1.19.8, а обновление безопасности для неё вышло 8 августа 2026 года.

Захват форума превратился в доступ к ChatGPT и Codex через SSO

Вечером 24 июля вышел Opus 5. Новая сессия за три часа собрала рабочий эксплойт под ARM64 на локальном Mac, затем его перенесли на x86-64 и jemalloc-конфигурацию Discourse. К 6 утра 25 июля был локальный RCE через загрузку картинки, к 10 утра автономный агент получил RCE на собственном инстансе Discourse Cloud и в доказательство прочитал /etc/hosts. Инстанс проксировали через rce.ee/ctf-forum под видом CTF-мишени: писать эксплойт для удалённой системы Opus отказывался.

Тем же скриптом получили RCE на инстансе OpenAI. Дальше сработала ошибка в SSO: активный участник community.openai.com мог лишиться аккаунтов ChatGPT и Codex вообще без взаимодействия. Исследователи зашли в аккаунт сотрудника, у которого Codex был подключён к GitHub-организации OpenAI, и отправили Codex просьбу открыть тот самый пулреквест. На этом тестирование остановили.

OpenAI выплатила 6 500 долларов. Discourse получила отчёт в субботу, ответила в воскресенье, выпустила фикс в понедельник и начала изолировать ImageMagick. Команда подчёркивает, что дыра для эскалации была в SSO OpenAI, а форум просто оказался удобным способом её показать. Самостоятельным инсталляциям Discourse нужен git pull и ./launcher rebuild app: обновление через веб-интерфейс образ не заменит.

Два месяца, три исследователя и меньше 3 000 долларов на токены

Из находки в Discourse вырос многомесячный проект: libheif проследили по мессенджерам, облачным сервисам, корпоративным продуктам и веб-фреймворкам. Кроме репозиториев OpenAI, Slack и Meta, в списке утечка токенов пользователей и ключей AWS у неназванной компании, аутентифицированный RCE в GitHub Enterprise и неаутентифицированный RCE в Next.js через оптимизацию AVIF.

Вся кампания заняла два месяца, обошлась меньше чем в 3 000 долларов токенов и делалась втроём; адаптация эксплойта под каждую новую компанию обычно занимала один или два дня, а агентный подход с GPT-5.6 Sol сократил путь от первой пробы до удалённого RCE примерно до 1–3 дней. Opus 4.8 буксовал с включённым ASLR несколько сессий, Opus 5 справился за часы, следующий скачок команда увидела на GPT-5.6 Sol, когда эксплойт писали вслепую. По словам исследователей, активность не заметил никто, кроме Shopify, хотя картинки шли тысячами и обработчики регулярно падали.

Сначала снимают отпечаток версии, потом шьют картинку под неё

Атака начинается с безобидной на вид загрузки: подготовленные .avif и .heic на разных эндпоинтах дают понять, какое семейство версий libheif крутится на сервере. Дальше идёт полезная нагрузка ровно под эту версию, n-day или 0-day. Механика ближе к подбору ключа: сначала смотрят, какой на двери замок, и только потом несут заготовку под эту модель.

Поверхность лежит ниже уровня приложения, поэтому язык и фреймворк неважны. libheif и libde265 приезжают в прод косвенно: через обёртки вроде ImageMagick, libvips и Sharp, через пакеты дистрибутива и готовые базовые образы контейнеров. Привязки к одной версии нет, задеты ветки 1.19.x, 1.20.x, 1.22.x и 1.23.x. Отсюда и название: даже когда до RCE не доходит, примитивы дают вычитать кусок кучи, а там чужие данные и переменные окружения.

В материалах нет технических деталей по Slack, Meta и той компании, у которой утекали токены и ключи AWS: имя скрыто, статус исправлений по каждой цели не расписан. Hacktron сама признаёт, что коробочных эксплойтов тут нет и часть RCE случилась только после тысяч загрузок, так что порог входа ненулевой. Странно, что на сайте исследования рекомендуют обновиться до libheif 1.23.2, хотя в разборе «Hacking OpenAI» на 14 сентября 2026 года актуальной названа 1.23.4, а 1.23.2 уже перекрыта следующими правками безопасности.

Что делать до следующей дыры в декодере

Hacktron ждёт новых проблем с памятью: формат ISO base media сложный, декодеры обновляются часто. Рекомендации на ближайшее время простые: выключить декодирование недоверенных HEIF и AVIF там, где оно не нужно, обработку картинок загнать в жёсткие одноразовые песочницы, libheif и libde265 держать на свежих сборках из канала безопасности дистрибутива. Команда говорит, что продолжает исследование по frontier-лабораториям и другим критичным для интернета системам; когда выйдут следующие разборы, не сказано.

Комментарии

Пока никто не написал. Будьте первым.

Присоединяйтесь к разговору

Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.

Из Google мы используем только имя и аватар. Почту не сохраняем.