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은 Discourse 이미지 처리 경로에서 발생한 libheif 알파 평면 경계 밖 읽기와 OpenAI의 별도 SSO 결함을 연결한 경로를 보고했습니다. 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은 OpenAI 포럼의 SSO 관계가 별도 포럼 침해의 영향을 키웠다고 보고했습니다. 공개 보고서는 정확한 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에 따르면 연구자들은 Discourse 이미지 경로를 통해 OpenAI 포럼에 접근했고 OpenAI 측 SSO 문제를 신고한 뒤 접근 증명용 무해한 pull request 제출 후 테스트를 중단했습니다.[4]

2026-07-28

Discourse는 GHSA-vhm9-85gw-x335를 공개하고 수정된 릴리스를 나열했으며 자체 호스팅 설치의 재빌드를 권고했습니다.[2]

2026-09-13

Hacktron은 협조 공개 보고서를 게시했습니다. 보고서에 따르면 OpenAI는 SSO 수정 사항을 확인했으며, 포상은 OpenAI 측 발견에 대한 것이고 Discourse 호스팅 포럼 테스트는 대상이 아니었습니다.[4]

단계별 공격 실행 흐름

단계 1

업로드된 이미지가 네이티브 디코더에 도달

Hacktron은 일반 이미지 검사 경로가 HEIF/HEIC 형식을 처리하지 못해 Discourse 이미지 경로가 ImageMagick을 통해 파일을 libheif로 전달했다고 보고했습니다.[4], [2]

단계 2

색상 평면 레이아웃을 알파 평면에 재사용

HeifPixelImage::overlay()의 취약한 코드는 해당 평면에서 alpha_stride를 얻었지만 alpha_p를 y * in_stride만큼 이동합니다. 알파와 색상 비트 깊이가 다르면 행 크기가 달라져 알파 할당 영역을 넘어 읽을 수 있습니다. 업스트림 권고문은 이를 CWE-125로 분류합니다.[1]

단계 3

후속 영향은 호스트 처리 경로에 따라 달라짐

libheif 권고문은 충돌 또는 디코딩된 픽셀을 통한 정보 노출 가능성을 설명합니다. 별도의 Discourse 권고문은 업로드 경로를 통한 원격 코드 실행을 설명하고 Discourse 문제에 CVSS 8.8을 부여합니다. 이 제품 수준의 영향과 점수를 CVE 자체의 CVSS 7.1 및 경계 밖 읽기와 혼동하지 마세요.[1], [2]

단계 4

별도 SSO 결함이 보고된 체인의 영향을 확장

Hacktron은 포럼 침해 뒤 OpenAI SSO 문제를 통해 직원 ChatGPT/Codex 계정에 접근했고 무해한 pull request로 연결된 저장소 접근을 입증했다고 밝혔습니다. 공개 자료는 SSO 코드 결함, 계정의 정확한 권한 또는 재사용 가능한 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];
보안 강화 패치
// 알파 평면에 해당하는 행 레이아웃을 사용합니다.
// 업스트림 수정은 libheif 1.22.0에 포함되어 있습니다.
uint8_t alpha_value = alpha_p[in_x0 + y * alpha_stride + x];

엔지니어링 및 시스템 보안 강화 체크리스트

출처