Как реально всё было
Как реально всё было

(ссылка на гитхаб и на готовый продукт - в конце статьи)

OpenAI добавляет водяной знак на все видео из Sora. Типа защита. Только вот оригиналы без водяных знаков лежат на тех же серверах — и забрать их может любой авторизованный пользователь. Я написал расширение, которое это делает в один клик. Рассказываю, как нашёл и почему это вообще работает.

С чего все началось

Я не такой частый юзер Sora, но когда увидел, что люди ПРОДАЮТ доступ к видео без водяных знаков — сначала подумал, что они сделали машинное обучение и фотошопом каждый кадр обрабатывают. Но когда я попробовал — результат был готов за 1 секунду. В тот момент я осознал: ЗНАЧИТ ВИДЕО ЛЕЖАТ НА СЕРВЕРАХ. Во мне проснулся инстинкт хакера, и я начал искать ДЫРУ.

Первым делом я полез изучать вкладку Network, пробуя различные методы тыка туда-сюда. Всё что удалось оттуда получить - это подтверждение, что да, оригинал видео без водяных знаков есть на сервере.

Например, при открытии видео мы видим запрос на получение медиафайла:/backend/project_y/post/s_69491ee99e408191addbc9b74004ebca/tree?limit=20&max_depth=1

Который и отдаёт URL для видео с водяным знаком, но в том же ответе присутствуют и другие поля:

...
"encodings": {
  "source": {
    "path": "https://videos.openai.com/az/files/00000000-3fc0-7280-a658-0386c8b0d4af%2Fraw?se=2026-01-01T00%3A00%3A00Z&sp=r&sv=2024-08-04&sr=b&skoid=cfbc986b-d2bc-4088-8b71-4f962129715b&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-12-27T01%3A09%3A39Z&ske=2026-01-03T01%3A14%3A39Z&sks=b&skv=2024-08-04&sig=aIewYW3/7HZGVUWwnvYnSUSplfd/WKOpvsaz0yC6wUw%3D&ac=oaisdsorprsouthcentralus"
  },
  "source_wm": {
    "path": "https://videos.openai.com/az/files/00000000-3fc0-7280-a658-0386c8b0d4af%2Fraw?se=2026-01-01T00%3A00%3A00Z&sp=r&sv=2024-08-04&sr=b&skoid=cfbc986b-d2bc-4088-8b71-4f962129715b&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-12-27T01%3A09%3A39Z&ske=2026-01-03T01%3A14%3A39Z&sks=b&skv=2024-08-04&sig=aIewYW3/7HZGVUWwnvYnSUSplfd/WKOpvsaz0yC6wUw%3D&ac=oaisdsorprsouthcentralus"
  },
  "endcard_wm": null,
  "thumbnail": {
    "path": "https://videos.openai.com/az/files/ec223ed8fe79a36_00000000-3fc0-7280-a658-0386c8b0d4af%2Fdrvs%2Fthumbnail%2Fraw?se=2026-01-01T00%3A00%3A00Z&sp=r&sv=2024-08-04&sr=b&skoid=cfbc986b-d2bc-4088-8b71-4f962129715b&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-12-27T01%3A09%3A39Z&ske=2026-01-03T01%3A14%3A39Z&sks=b&skv=2024-08-04&sig=eedTClrNLjxDF7aCW2CbU1TRras38CF%2BOgmpJ4wAW9U%3D&ac=oaisdsorprsouthcentralus"
  },
  "unfurl": {
    "path": "https://videos.openai.com/az/files/34780fbcd347644_00000000-3658-7284-9d9f-64947faf826b%2Fdrvs%2Flink_thumbnail%2Fraw?se=2026-01-01T00%3A00%3A00Z&sp=r&sv=2024-08-04&sr=b&skoid=cfbc986b-d2bc-4088-8b71-4f962129715b&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-12-27T01%3A10%3A43Z&ske=2026-01-03T01%3A15%3A43Z&sks=b&skv=2024-08-04&sig=3dx5D0VSb8YcK6Pf1VOuoM3s7%2BBaeGuUTqTnh9nAHQ4%3D&ac=oaisdsorprcentralus"
  },
  "md": {
    "path": "https://videos.openai.com/az/files/2fccbbc30a166d1_00000000-3fc0-7280-a658-0386c8b0d4af%2Fdrvs%2Fmd%2Fraw?se=2026-01-01T00%3A00%3A00Z&sp=r&sv=2024-08-04&sr=b&skoid=cfbc986b-d2bc-4088-8b71-4f962129715b&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-12-27T01%3A09%3A39Z&ske=2026-01-03T01%3A14%3A39Z&sks=b&skv=2024-08-04&sig=KfpzXrJ15F3/iti4/NMrWGyQVbKQNmD3LCa0RuAU1Gk%3D&ac=oaisdsorprsouthcentralus"
  },
  "gif": {
    "path": "https://videos.openai.com/az/files/ec3c5d130062958_00000000-3fc0-7280-a658-0386c8b0d4af%2Fdrvs%2Fgif%2Fraw?se=2026-01-01T00%3A00%3A00Z&sp=r&sv=2024-08-04&sr=b&skoid=cfbc986b-d2bc-4088-8b71-4f962129715b&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-12-27T01%3A09%3A39Z&ske=2026-01-03T01%3A14%3A39Z&sks=b&skv=2024-08-04&sig=ZLmnXWBXyptAIBFFjb8oSDZmkJgMIUWH9BUspSk3kvs%3D&ac=oaisdsorprsouthcentralus"
  }
},
...

Нас интересует поля source и source_wm, URL на видео без водяного знака и с водяным знаком соответственно. Проблема в том, что OpenAI в оба поля вставляют одинаковый URL. Но само наличие поля source указывает на то, что изначально оригинал там был - а значит, вероятно, до сих пор где-то есть.

Первым делом я подумал - ха, так можно просто попробовать подобрать URL, вставляя нужный gen_id/task_id/post_id. OpenAI использует целых три идентификатора для обозначения видео. Но ничего из этого не получилось, потому что в каждом URL присутствует параметр подписи (signature), который генерируется на стороне сервера и который невозможно брутфорсить.

Значит проблема где-то в другом месте...

Возвращение к истокам

Спустя пару часов безуспешных попыток я вдруг вспоминаю: стоп, у них же был другой сайт! Не зря этот называется Sora2 - на первом я что-то не припомню водяных знаков, а аккаунт тот же!

И вот я иду на старый сайт Sora, открываю старое видео - запрос уже другой: /backend/generations/gen_01kbk5p1s5f9pb63q81sx9atax

В нем используется gen_id вместо post_id. Я подумал - это оно! Но когда я получил gen_id для видео из новой Sora и попытался выполнить запрос с ним - получил ошибку. Хм, значит снова мимо, едем дальше.

Дальше я начал смотреть - а что еще всплывает во вкладке network?
Я при открытии сайта я увидел странный запрос:/backend/notif?limit=10

Который возвращает всю нашу библиотеку (и Sora1, и Sora2) во всех возможных качествах, включая тот самый source, который Sora2 не хотела отдавать:

"encodings": {
    "source": {
        "path": "https://videos.openai.com/az/files/00000000-e9ac-7283-a06d-7e9688f1756f%2Fraw?se=2026-01-01T00%3A00%3A00Z&sp=r&sv=2024-08-04&sr=b&skoid=cfbc986b-d2bc-4088-8b71-4f962129715b&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-12-27T01%3A10%3A01Z&ske=2026-01-03T01%3A15%3A01Z&sks=b&skv=2024-08-04&sig=25ruxWAU/CxniQTJBn6Cvq8GD0sUzkx5MUi2QJouPSc%3D&ac=oaisdsorprwestus2",
        "size": 5938502,
        "width": 1280,
        "height": 704,
        "duration_secs": 10.1,
        "ssim": 0.9935621,
        "az_path": null,
        "codec": "h264"
    },
    "source_c2pa": null,
    "md": {...},
    "ld": null,
    "thumbnail": {...},
    "link_thumbnail": {...},
    "spritesheet": {...},
    "gif": {...},
    "mp3": {...},
    "source_wm": {
        "path": "https://videos.openai.com/az/files/00000000-c904-7284-9ac9-cb42fe88ec64%2Fraw?se=2026-01-01T00%3A00%3A00Z&sp=r&sv=2024-08-04&sr=b&skoid=cfbc986b-d2bc-4088-8b71-4f962129715b&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-12-27T01%3A10%3A43Z&ske=2026-01-03T01%3A15%3A43Z&sks=b&skv=2024-08-04&sig=l8CTaphMR1i/JxTvjR%2BhvhAt0Oi6RoHoRXnLjJRTs04%3D&ac=oaisdsorprcentralus",
        "size": 5929815,
        "width": 1280,
        "height": 704,
        "duration_secs": 10.1,
        "ssim": 0.9943679,
        "az_path": null,
        "codec": "h264"
    },
    "md_wm": {...},
    "ld_wm": null,
    "thumbnail_wm": {...},
    "link_thumbnail_wm": {...},
    "spritesheet_wm": {...},
    "gif_wm": {...},
    "endcard_wm": null
},

То есть endpoint для уведомлений отдаёт то, что основной API прячет. Классика.

Открываем видео по ссылке - да, это оно. Видео, сгенерированное на новом сайте Sora2 без водяного знака!

Ссылки

Chrome Web Store

GitHub

Комментарии (7)


  1. ArtyomOchkin
    02.01.2026 16:17

    Пользуюсь ChatGPT в основном для кодинга, но спасибо, было интересно узнать об этой дырке в Sora. Отличная статья!


  1. sirojiddin13
    02.01.2026 16:17

    Ну раз об этом уже пишут, то скоро прикроют


  1. R0uT3r
    02.01.2026 16:17

    Классная статья! Не думали попробовать им как-то сообщить об этой дыре (у них же есть BugBounty программа?)? Может получили бы вознаграждение.

    Немного непонятно зачем OpenAI хранить два видео на сервере. Если бы так парились над безопасностью, то затирали бы видео без водяного знака. Если не так сильно парятся, то сделали бы удаление через деньгу или подписку в своём сервисе (ну или не ставили бы водяной знак вообще). Да и растрата пространства как будто не очень оптимальная: две итерации одного и того же видео хранить, хотя пользователю всегда отдаётся лишь одно.


    1. durnoy
      02.01.2026 16:17

      Возможно, маркетинг. Размер, форма, положение водяного знака может меняться в зависимости от настроения и скидок. Пересоздать итоговое видео с другим знаком -- это очень быстро по сравнению с созданием исходного. Хранить исходную копию дешевле, чем все остальное.


  1. Standfest
    02.01.2026 16:17

    Не работает. Видео: https://sora.chatgpt.com/g/gen_01ke1q8kpnewq9hpg5ga7hjnc7

    Пишет:

    Open a video page Go to /p/... or /d/... page

    По ссылке редиректит на https://sora.chatgpt.com/profile где говорит что Sora недоступна для вашей страны (Latvia) и "Go back to the old Sora"


    1. Sm1GhT Автор
      02.01.2026 16:17

      Тут сразу две проблемы:
      1) поставь себе средство из трех букв, чтобы сайт думал, что ты не из латвии
      2) найди новый сайт соры. расширение написано для него а не для старого сайта. На старом сайте и так нету вотермарок


  1. shnaps666
    02.01.2026 16:17

    Работает. Примите наши благодарности.
    Работает. Примите наши благодарности.