Oleksandr Kuzmenko, РедакторОпубліковано 5 хв читанняЗа участі AI · перевірено редактором
TL;DR
- Неперевірені слухачі postMessage на кореневих доменах можуть нівелювати ізоляцію пісочниць iframe.
- Внесення сторонніх сервісів до білих списків CSP несе ризики обходу, якщо вони підтримують відповіді JSONP.
- Одного переходу за публічним посиланням на чат було достатньо для виклику довільних API від імені користувача.
Прорив пісочниці через postMessage
ChatGPT використовує ізоляцію доменів для обмеження коду, що генерується у блоках попереднього перегляду HTML. Дослідники виявили, що рендеринг інтерактивних графіків ініціалізував бібліотеку MathLive, яка реєструвала глобальний обробник подій window у кореневому документі chatgpt.com для подій типу mathlive#virtual-keyboard-message.
Цей слухач мав політику походження none та приймав повідомлення від будь-яких фреймів без перевірки event.origin. Отримавши команду оновлення розкладки віртуальної клавіатури, MathLive вставляла передану розмітку безпосередньо у властивість innerHTML головної сторінки застосунку.
Обхід політики CSP через JSONP у YouTube oEmbed
Браузери не виконують теги <script>, додані напряму через innerHTML, однак додавання <iframe> з атрибутом srcdoc створило новий документ у межах джерела https://chatgpt.com. Сувора політика Content Security Policy (CSP) блокувала інлайн-скрипти, але містила в білому списку ресурси youtube.com.
Дослідники використали ендпоінт YouTube /oembed, що підтримував виклики JSONP. Додавання конструкції ;void до параметра виклику дозволило виконати корисне навантаження в сесії авторизованого користувача. Це забезпечило зчитування списку розмов та ексфільтрацію вмісту приватних листувань на зовнішній сервер. Компанія OpenAI закрила вразливість 26 жовтня, надавши звіту критичний пріоритет P1.
Коли використовувати
- Під час аудиту міждоменних взаємодій через postMessage між застосунком та пісочницями.
- При конфігурації політик CSP для уникнення ін'єкцій через механізми JSONP.
