FlawOpen

flawopen.com/Incidents/openai-community-forum-heif-sso-chain-september-2026

● OpenAI / Discourse / libheif · CVE-2026-32882 · 2026-07-25 · CVSS 7.1 · Высокий
Исследования · FlawOpen

Цепочка от форума OpenAI к SSO: CVE-2026-32882

Hacktron сообщила о цепочке, в которой выход за границы при чтении альфа-плоскости libheif через обработку изображений Discourse сочетался с отдельной ошибкой SSO OpenAI. CVE-2026-32882 исправлена в libheif 1.22.0; исследователи утверждают, что прекратили тестирование после безвредного pull request, подтверждавшего доступ.[4], [1], [2]

💡 Простыми словами (ELI5)

Представьте две прозрачные плёнки: на одной широкая строка цветных клеток, на другой — более узкая строка значений прозрачности. Декодер использовал длину строки цветной плёнки, чтобы найти следующее значение прозрачности. С каждой строкой чтение уходило всё дальше за край меньшей плёнки. Исправление использует длину строки самой альфа-плоскости.[1]

Ключевые понятия и термины

HEIF / HEIC
Формат-контейнер изображений. Файл HEIF может содержать производные изображения, наложения и отдельные цветовую и альфа-плоскости, которые декодер должен обрабатывать в собственных границах.[1]
libheif
Нативная библиотека для декодирования и кодирования изображений HEIF и AVIF. В уведомлении Discourse путь обработки загрузок изображений связан с CVE-2026-32882.[1], [2]
Stride
Число байтов между началом одной строки плоскости изображения и следующей. Разная глубина цвета может задавать разные stride для цветовой и альфа-плоскостей.[1]
CWE-125
Чтение за границами буфера: программа читает за пределами выделенной области памяти. Здесь адрес альфа-плоскости вычислялся с использованием stride цветовой плоскости.[1]
Граница доверия SSO
Связь идентичности между службой входа и приложением. По сообщению Hacktron, связь SSO форума OpenAI увеличила последствия отдельной компрометации форума; в публичном отчёте не раскрыты точная ошибка SSO и её исправление.[4]

Связи со стандартами

  • Ссылка CWE для слабого места, описанного в этом руководстве: CWE-125

Хронология инцидента

2026-05-19

Сопровождающий libheif публикует GHSA-hg7q-rjr2-8x46, присваивает идентификатор CVE-2026-32882 и указывает libheif 1.22.0 как исправленную версию.[1]

2026-07-25

Hacktron утверждает, что исследователи достигли форума OpenAI через путь обработки изображений Discourse, сообщили об ошибке SSO со стороны OpenAI и прекратили тесты после безвредного pull request, подтверждавшего доступ.[4]

2026-07-28

Discourse публикует GHSA-vhm9-85gw-x335, перечисляет исправленные версии и рекомендует пересобрать самостоятельно размещённые установки.[2]

2026-09-13

Hacktron публикует отчёт о координированном раскрытии. В нём сказано, что OpenAI подтвердила исправление SSO; вознаграждение относилось к находке в системе OpenAI, а не к тестированию размещённого Discourse форума.[4]

Пошаговый сценарий атаки

Шаг 1

Загруженное изображение попадает в нативный декодер

Hacktron сообщает, что путь обработки изображений Discourse передавал файлы HEIF/HEIC через ImageMagick в libheif, поскольку обычный механизм проверки изображений не обрабатывал этот формат.[4], [2]

Шаг 2

Для альфа-плоскости используется разметка цветовой

В HeifPixelImage::overlay() уязвимый код сдвигает alpha_p на y * in_stride, хотя для этой плоскости получено значение alpha_stride. При разной глубине цвета размеры строк различаются, и чтение может выйти за выделенную память альфа-плоскости. В upstream-уведомлении ошибка классифицирована как CWE-125.[1]

Шаг 3

Последствия зависят от пути обработки на стороне сервиса

Уведомление libheif описывает сбой или возможное раскрытие данных через декодированные пиксели. Отдельное уведомление Discourse говорит об удалённом выполнении кода через путь загрузки и оценивает проблему Discourse в CVSS 8.8. Не подменяйте эту оценку продукта значением CVSS 7.1 и чтением за границами буфера в самой CVE.[1], [2]

Шаг 4

Отдельная ошибка SSO расширила описанную цепочку

Hacktron утверждает, что компрометация форума позволила получить доступ к аккаунтам ChatGPT/Codex сотрудников через проблему SSO OpenAI, а безвредный pull request подтвердил доступ к подключённому репозиторию. Публичные источники не раскрывают дефект кода SSO, точные права аккаунта или применимое к другим системам исправление.[4]

Шаг 5

Ограничивайте доказательства и формулировки

Hacktron сообщает, что прекратила тестирование после pull request, подтверждавшего доступ. В отчёте описано контролируемое исследование, а не вредоносный инцидент или доказанное получение данных клиентов. Исследователи также уточняют: вознаграждение OpenAI относилось к находке SSO и не покрывало тесты размещённого Discourse форума.[4]

Исходный код: Уязвимый vs Защищённый вариант

Это узкий фрагмент, а не самостоятельный декодер и не дословный полный патч. В уведомлении сопровождающего указано уязвимое выражение и подтверждено исправление в libheif 1.22.0. Индексирование каждой плоскости должно использовать её собственный stride; повторное использование stride цвета смещает чтение альфа-данных слишком далеко при разной глубине цвета. В принимающем приложении также обновляйте декодеры и изолируйте преобразование недоверенных загрузок.[1], [3]

УЯЗВИМАЯ РЕАЛИЗАЦИЯ
// Упрощенный фрагмент описанного шаблона доступа.
// alpha_stride был доступен, но использовался stride цветового плана.
uint8_t alpha_value = alpha_p[in_x0 + y * in_stride + x];
БЕЗОПАСНЫЙ ИСПРАВЛЕННЫЙ ВАРИАНТ
// Используйте разметку строк самого альфа-плана.
// Исправление внесено в upstream-версию libheif 1.22.0.
uint8_t alpha_value = alpha_p[in_x0 + y * alpha_stride + x];

Чек-лист по защите системы для инженеров

Источники