惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
The Last Watchdog
The Last Watchdog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
G
Google Developers Blog
博客园 - 叶小钗
雷峰网
雷峰网
人人都是产品经理
人人都是产品经理
博客园_首页
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 三生石上(FineUI控件)
Help Net Security
Help Net Security
Cloudbric
Cloudbric
AI
AI
N
News | PayPal Newsroom
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
SecWiki News
SecWiki News
H
Heimdal Security Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
V
V2EX
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
S
Security Affairs
L
LangChain Blog
The Hacker News
The Hacker News
F
Full Disclosure
aimingoo的专栏
aimingoo的专栏
Hacker News - Newest:
Hacker News - Newest: "LLM"
腾讯CDC
Webroot Blog
Webroot Blog
A
About on SuperTechFans
H
Hacker News: Front Page
Cyberwarzone
Cyberwarzone
WordPress大学
WordPress大学
L
LINUX DO - 热门话题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Attack and Defense Labs
Attack and Defense Labs
M
MIT News - Artificial intelligence

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Я мог взломать весь Чемпионат мира FIFA
Евгений · 2026-06-24 · via Все публикации подряд на Хабре

Простой

8 мин

141

Всё началось с регистрации футбольного агента

У FIFA есть FIFA Agent Platform. Это публичный портал, на котором можно зарегистрироваться и стать лицензированным футбольным агентом. Отправляешь документы, верифицируешь почту, вот и всё. Очень просто.

Не ожидал я того, что будет потом.

При регистрации на agents.fifa.org FIFA добавляет аккаунт пользователя в свой тенант Microsoft Entra (ранее Azure AD). Это тот же тенант, который управляет всеми внутренними платформами FIFA.

Первые две попытки зарегистрироваться окончились неудачно, потому что освещение на моих идентификационных фотографиях было недостаточно хорошим:

FIFA registration failed

«Сбой регистрации на последнем этапе проверки идентификации», — очевидно, требования к моему селфи у FIFA выше, чем к моей реальной безопасности

Третья попытка завершилась удачно. Я получил это прекрасное письмо:

FIFA FAP confirmation email

«Доступ запрещён», хотя на самом деле нет

После регистрации я попытался перейти на fdp.fifa.org — FIFA Football Data Platform. Приложение аутентифицировало меня через общий тенант Entra, проверила мои роли, не нашло их и показало такое сообщение:

«К вашему аккаунту не привязано никаких ролей FIFA Football Data Platform».

Вроде всё верно, правда? Доступ запрещён, уходите, не на что тут смотреть.

Но дело в том, что всё это происходило на стороне клиента. Приложение Angular проверяло JWT на наличие маркера NO_ROLES и рендерило страницу о запрете доступа. API бэкенда ничего не проверяли. Они просто отправляли то, что у них попросят.

Добро пожаловать в Streaming Management Panel

Обойдя защиту на стороне клиента, я оказался в панели управления стримингом и остолбенел.

Streaming Management panel showing all World Cup matches

Все матчи Чемпионата мира FIFA 2026 года с возможностью управления стримингом

Это не было какое-то окружение разработки или тестовые данные. Это настоящая панель управления стримингом Чемпионата мира в продакшене. Каждый матч, каждый угол камеры, каждый URL получения RTMP, каждый ключ потока.

Разверну один из матчей, чтобы вы видели, что я имею в виду:

Expanded match showing all five camera RTMP URLs

Пять углов камеры матча: PGM, Tactical, Camera1, High Behind Left, High Behind Right

У каждого матча есть пять потоков камеры, у каждого из которых есть:

  • URL получения RTMP (НА который камера отправляет видео).

  • Preview manifest (где можно ПОСМОТРЕТЬ поток).

  • URL вывода (манифест HLS, передаваемый партнёрам, занимающимся трансляциями).

URL получения RTMP выглядят так:

rtmp://in-6c81fc99-513f-4c76-82c2-877e0b93f2ea.westeurope.streaming.mediakind.com:1935/96886a14-9987-420f-814c-2f7cec5408ae

А что это за UUID в конце? 96886a14-9987-420f-814c-2f7cec5408ae. Это ключ потока (здесь я его изменил). Он общий для всех углов камер на одном матче. Один ключ, чтобы править всеми

Инфраструктура стриминга хостится на MediaKind, партнёре FIFA по стриминговым технологиям. Это конечные точки продакшена. Именно они в прямом эфире получают потоки с камеры на стадионах США, Мексики и Канады.

Я открыл VLC, всё работало

Мне нужно было убедиться, что preview manifest работают. Один из них я скопировал в VLC.

VLC playing a live World Cup tactical camera feed

VLC с потоком тактической камеры Чемпионата мира

Я сразу его закрыл. Но ущерб (моему разуму) уже был нанесён. Эти URL предпросмотра демонстрируют видео в прямом эфире. Во время активных матчей. И они доступны любому, у кого есть URL.

Я мог остановить потоки

У меня был доступ не только на чтение. На панели управления стримингом были доступны все элементы управления: начала и конца трансляции, планирования. Для каждого матча и каждого угла камеры.

Stream control confirmation dialog

Одного щелчка достаточно, чтобы завершить передачу видео с Чемпионата мира

Я не прикасался ни к одной кнопке. Но они были доступны и работали, и их мог нажать любой с аккаунтом NO_ROLES.

Ядерная опция

Объясню, что это значит.

Эти URL получения RTMP — буквально прямой путь с камер на стадионах в цепочку распространения вещания FIFA. Камера -> получение RTMP -> MediaKind -> партнёры по вещанию -> телевизор.

Если бы нападающий отправил видео на одну из этих конечных точек RTMP с ключом потока (который указан ПРЯМО В URL), то заменил бы поток камеры. Поток PGM (Program) — это основной вывод трансляции. Если заменить его, то все телевизионные сети, получающие поток FIFA, показывали бы то, что отправил нападающий.

Ключ потока общий для всех пяти камер, поэтому один нападающий мог бы одновременно перехватить поток со всех камер.

Он мог бы проиграть Rickroll для всего Чемпионата мира FIFA. Или показать геймплей Subway Surfers.

Я это не тестировал и не передавал ничего на конечные точки RTMP, но инфраструктура для этого уже была готова.

Но и это ещё не всё

У меня был доступ не только к панели управления стримингом: аккаунт с NO_ROLES открывал доступ ко всей платформе.

FDP navigation showing full access

Соревнования, матчи, команды, инструменты, Exchange Platform, дэшборд анализа, информационная система для комментаторов, FIFA AI Pro, админка. Всё было доступно

Также на платформе имелся дэшборд трансляции матчей со встроенным проигрывателем видео, хронологией событий в реальном времени и данными о командах:

FDP match overview with live video

Отметка LIVE здесь неспроста

Расширенная аналитика (текущего матча)

Advanced Analytics showing live possession and attempt data

На панели Advanced Analytics в реальном времени отображаются данные о владении мячом и ударах по воротам

Управление матчем (доступ на запись)

И здесь ситуация усугубляется: во вкладке Management ресурса fdp.fifa.org есть операции записи. И бэкенд принимает их от аккаунта с NO_ROLES.

Update Live Stats modal with Edit and Publish button

Окно Update Live Stats с редактором, временем матча, полями счёта и кнопкой Edit and Publish

Match management buttons

Кнопки управления матчем

Нападающий мог:

  • Изменять комментарии редакторов и публиковать их в трансляционные системы.

  • Корректировать официальное время начала матча.

  • Отправлять данные о тактической расстановке.

  • Менять счёт и статистику матчей.

Эти данные передаются в Commentator Information System и отображаются в прямом эфире.

Commentator Information System

Доступ к cis.fifa.org тоже был возможен через аккаунт с NO_ROLES. Это дэшборд реального времени, которым пользуются комментаторы матчей.

CIS main dashboard

Основной дэшборд CIS

CIS live match view

Окно активного матча CIS

Когда комментатор говорит: «любопытный факт: Эннер Валенсия, которому 36 лет и 222 дня — самый возрастной полевой игрок из выступавших за Эквадор на Чемпионатах мира», эта информация берётся именно отсюда. Мой аккаунт мог видеть все заметки редакторов, все предматчевые статистические сводки, все темы обсуждения, подготовленные для каждого матча.

Открытое окружение разработчика

В качестве бонуса я нашёл по адресу xxxxxxxxx-spreadsheets-api.azurewebsites.net Azure Function App, возвращавшее метаданные и URL для прямого скачивания с Azure Blob Storage 23 внутренних файлов FIFA.

{
    "Size": 10,
    "Skip": 0,
    "Total": 23,
    "Items": [
        {
            "Name": "00_TransferCount_in_ENGLISH.xlsx",
            "BlobPath": "https://xxxxxxxxx.blob.core.windows.net/spreadsheet-storage/00\_TransferCount\_in\_ENGLISH.xlsx"
        },
        {
            "Name": "0_pending_transfers_example.xlsx",
            "BlobPath": "https://xxxxxxxxx.blob.core.windows.net/..."
        },
        {
            "Name": "Debbie.xlsx",
            "BlobPath": "https://xxxxxxxxx.blob.core.windows.net/..."
        }
    ]
}

Это отчёты о трансферах, сравнение доходов, статистика рефери и тренеров. А ещё некий Debbie.xlsx. И всё это без проверок ролей.

Отправка отчёта об уязвимости оказалась настоящим кошмаром

Итак, я обнаружил всё это, когда Чемпионат мира уже шёл. Проводились матчи, URL RTMP были активны, а ключи потоков открыты. Но у FIFA не было ни программы баг-баунти, ни security.txt, ни публичных контактов по вопросам безопасности.

Всё это привело к самой напряжённой ночи в моей жизни.

Попытка 1: электронная почта

Полное описание уязвимости я отправил на все адреса почты FIFA, которые смог найти и придумать:

dataprotection@fifa.orglegal@fifa.orgmedia@fifa.orgcontact@fifa.org и на почту некоторых сотрудников.

Пять из них не были доставлены. Остальные канули в пустоту. Никакого ответа.

Попытка 2: WhatsApp

Я нашёл в LinkedIn Себастьяна Рунге (главу Football Technology & Data в FIFA, 14 лет в организации). Там был указан его телефонный номер. Я написал ему на WhatsApp. Ответа не было.

Попытка 3: телефон головного офиса FIFA

Я позвонил на +41 43 222 7777. Прослушал сообщение о том, что офис закрыт. В Цюрихе был вечер воскресенья.

Попытка 4: линия FIFA для медиа

Позвонил на +41 43 222 7272. Офис тоже закрыт.

Попытка 5: Конференц-центр Далласа

IBC (International Broadcast Centre, Международный центр трансляций) находится в Kay Bailey Hutchison Convention Center в Далласе. Я позвонил на +1 (214) 939-2700. Попал в голосовую почту, оставил сообщение.

Попытка 6: MediaKind

Здесь произошёл прорыв: я позвонил на бесплатную линию MediaKind +1 833 211 8472. Кто-то поднял трубку и сразу понял, в чём проблема. Он попросил меня отправить подробности на электронную почту с ключами потоков в качестве доказательства. Я так и сделал.

Попытка 7: HBS (Host Broadcast Services)

Позвонил на +41 41 726 0090. Мне сказали, что в компании мне никто помочь не может, и повесили трубку. Я перезвонил, ответа не было.

Попытка 8: Infront Sports & Media

Позвонил на +41 41 723 15 15 (родительская компания HBS). Нет ответа.

Попытка 9: CISA

Тут всё стало любопытнее. Я узнал, что CISA (Cybersecurity and Infrastructure Security Agency, Агентство по кибербезопасности и защите инфраструктуры) — это федеральная организация, занимающаяся кибербезопасностью Чемпионата мира FIFA 2026 года, в том числе и системами вещания. Я позвонил в её круглосуточный оперативный центр по номеру +1 888 282 0870.

Трубку подняли и выслушали меня. Попросили отправить подробности по электронной почте. Я так и сделал.

Попытка 10: ФБР

Раньше я работал в кибербезопасности, и у меня сохранились контакты в ФБР. Я написал им в Signal. Они ответили, сказали, что у них есть нужные контакты, но им нужно подать информацию нужным образом.

Хронология

Когда

Что

Ночь

Обнаружена панель управления стримингом.

Ночь

Открыл preview manifest в VLC. Убедился, что он рабочий. Сразу же закрыл его.

Ночь

Отправил отчёт об уязвимости более чем десятку адресов FIFA. Пять писем не были доставлены.

Ночь

Написал в WhatsApp Себастьяну Рунге.

Ночь

Позвонил в FIFA Zurich. Офис закрыт. Позвонил на линию FIFA для медиа. Закрыто.

Ночь

Позвонил в Конференц-центр Далласа. Голосовая почта.

Ночь

Позвонил в MediaKind. Кто-то ответил. Отправил полный отчёт с ключами потоков.

Ночь

Позвонил HBS. Трубку повесили. Перезвонил. Ответа не было.

Ночь

Позвонил на круглосуточную линию CISA. Меня выслушали. Отправил отчёт.

Ночь

Сообщил своим контактам в ФБР через Signal. Они ответили.

Следующий день

Уязвимость устранена. FIFA ничего мне не написала.

Первопричина

Проблема сводится к одной архитектурной ошибке: авторизация на клиенте без проверки на сервере.

Внутренние приложения FIFA используют для аутентификации и управления доступом на основе ролей Microsoft Entra. Фронтенды Angular/React/Vue проверяют токен JWT на указание ролей и соответствующим образом рендерят страницы о запрете доступа. Однако API бэкенда доверяют любому аутентифицированному члену тенанта и передают данные вне зависимости от ролей.

Цепочка атаки:

  1. Зарегистрироваться на agents.fifa.org (доступно публично).

  2. Нас добавляют в тенант Entra FIFA.

  3. Выполняем аутентификацию в любом внутреннем приложении FIFA.

  4. Клиент говорит «доступ запрещён».

  5. Сервер говорит «бери что хочешь».

Этот паттерн затрагивает как минимум эти ресурсы:

  • fdp.fifa.org (Football Data Platform),

  • cis.fifa.org (Commentator Information System),

  • xxxxxxxxx-spreadsheets-api.azurewebsites.net (окружение разработчика).

И потенциально другие, использующие тот же тенант.

Устранение уязвимости

Где-то в промежутке между отправкой отчётов и следующим утром уязвимость была пропатчена. Мой аккаунт NO_ROLES теперь возвращает ответы 403 и от сервера, а не только от клиента.

FIFA так ничего и не ответила. Не подтвердила получение отчёта, не поблагодарила. Не связалась со мной, чтобы обсудить вознаграждение. Ни-че-го.

Но она оставила меня в списке рассылки писем FDP. Я по-прежнему получаю официальные документы о матчах Чемпионата мира FIFA 2026 года: Start Lists, Tactical Lineups, Full Time Match Reports. Все они отправляются с no_reply@fdp.fifa.org на четырёх языках.

Обращение к FIFA

Нужно отдать должное, закрыли дыру вы быстро. Но:

  • Заведите файл security.txt. Серьёзно, на дворе 2026 год.

  • Опубликуйте VDP (Vulnerability Disclosure Policy, политику раскрытия уязвимостей). Всё-таки вы проводите крупнейшее спортивное мероприятие в мире.

  • Авторизация на стороне клиента — это не авторизация, об этом знает любой стажёр.

  • Когда исследователю приходится звонить в CISA и ФБР, чтобы связаться с вами, то в выстроенных вами процессах что-то явно не так.

  • Создайте программу баг-баунти. Исследователи не должны звонить в ФБР, чтобы сделать вам одолжение.

Всего хорошего, и спасибо за рыбу!