Разработчики хотят пробовать новые инструменты, потому что каждый второй пост в ленте обещает «убийцу Chrome» или «революцию в скрейпинге». Но хайп не равен качеству — и не равен безопасности. Доверять проекту только потому, что у него 14 тысяч звёзд, — всё равно что пускать незнакомца в дом, потому что у него много подписчиков в соцсетях.
Мы увидели Obscura в X. Headless-браузер на Rust от 16-летнего разработчика с ником h4ckf0r0day. 14,6 тысяч звёзд за два месяца. Красивые цифры, громкие заявления. Заинтересовались — развернули, попробовали, а потом копнули глубже. И прогнали полноценный security-аудит.
Что такое Obscura
Obscura — headless-браузер на Rust, позиционируется как замена headless Chrome для AI-агентов и скрейпинга. Сторонний проект, не часть чьего-либо ядра.
Технические характеристики (по данным авторов): - 30 МБ памяти против 200+ у Chrome — в 6 раз меньше - 85 мс загрузка страницы против ~500 мс — в 6 раз быстрее - Встроенный anti-detect: fingerprint rotation через CDP - 57 МБ Docker-образ на distroless - Поддержка CDP — работает с Puppeteer и Playwright без изменений - MCP-сервер из коробки: 12 инструментов для AI-агентов - CLI: obscura fetch --dump markdown, obscura scrape с параллелизмом - Лицензия Apache 2.0
Звучит как мечта: лёгкий, быстрый и совместимый с существующей экосистемой. Но мы не остановились на README.
Что мы нашли при аудите
Взяли репозиторий, склонировали 20 771 строку Rust, проверили всё: сетевые вызовы, зависимости, Dockerfile, CI/CD, профиль автора. Цель была простая: понять, можно ли запускать это в production-окружении, где браузер получает произвольные URL от AI-агента.
Код чистый. Ноль phone-home, ноль C2-команд, ноль эксфильтрации данных, ноль обфускации. Все 371 зависимость из crates.io — ни одной git-зависимости. Это хороший знак: проект не пытается ничего скрыть.
Авторство мутное. Формально проект ведёт h4ckf0r0day — 26 коммитов за два месяца, в основном README, маркетинг и ответы на issues. Основной код пишет некто SGavrl — 72 коммита: V8-integration, CDP-протокол, stealth-движок. Кто это — непонятно. «16-летний разработчик» не написал 20 771 строку системного Rust с интеграцией V8 за два месяца. Это не значит, что проект вредоносный. Это значит, что за красивой историей стоит кто-то ещё, и мы не знаем кто.
14,6 тысяч звёзд за 2 месяца. Подозрение на накрутку. Спонсоры проекта — прокси-сервисы (Swiftproxy, ProxyEmpire, MangoProxy) с партнёрскими ссылками в README. Сами по себе звёзды не проблема, но в сочетании с мутным авторством это повод задуматься: звёзды — метрика внимания, а не качества.
Нет культуры безопасности. Нет SECURITY.md, нет disclosure-политики, нет bug bounty, нет ни одного независимого аудита. Проект с 20 тысячами строк Rust, который запускает непроверенные URL, не имеет даже формального процесса сообщения об уязвимостях.
V8 — главная атакная поверхность. Obscura встраивает движок V8 напрямую. Sandbox escape в V8 даёт RCE на хосте. Это не гипотетический риск: Chrome patched десятки sandbox-уязвимостей за последние два года. Obscura обновляет V8 через crates.io, но кто следит за timely-обновлениями — непонятно.
CDP без аутентификации. По умолчанию CDP открыт на loopback без токена. Любой процесс на той же машине может управлять браузером. В серверном сценарии — где AI-агент дёргает браузер для скрейпинга — это значит, что компрометация одного контейнера даёт контроль над браузерным движком соседа.
Есть и хорошие safety-решения. SSRF-защита включена, file:// заблокирован, CDP слушает только loopback, 3 unsafe-вызова — raw pointer casts, стандартная практика для V8 FFI.
Забавный момент с Reddit. Claude AI сфлажил проект как малварь исключительно из-за ника автора — «H4ckf0r0day». Никто не представил доказательств вредоносности кода. Имя автора — не вектор атаки, но показывает, как работает восприятие безопасности: люди судят по обложке, а не по коду.
Из минусов (серьёзно)
- wreq — pre-release зависимость с BoringSSL, расширяет TLS-поверхность. Pre-release в продакшене — красный флаг для security-аудита.
- Single point of failure. 72 коммита от SGavrl. Если он уйдёт, проект встанет.
- Нет процесса обновления V8. Браузерный движок без регулярных апдейтов — накапливающаяся угроза.
- Прокси-спонсоры. Партнёрские ссылки в README создают конфликт интересов: проект заинтересован в росте аудитории больше, чем в стабильности.
Чем полезно нам
Мы попробовали Obscura в контексте наших проектов — PlanEx, Hermes-агенты, kanban-пайплайн. Вердикт: использовать пока нет.
Для задач скрейпинга и браузинга внутри AI-агентов технические характеристики впечатляют — 30 МБ памяти и 85 мс загрузки реально решают проблему «Chrome жрёт гигабайт на 10 вкладок». Но в нашей архитектуре агенты запускают код на сервере, и мы не готовы давать непроверенному браузерному движку доступ к сети без аудита V8-песочницы.
Если проект доживёт до независимого security-аудита и закроет базовые hygiene-вопросы (SECURITY.md, CDP-аутентификация, процесс обновления V8) — вернёмся. Пока наблюдение.
Что сделать, чтобы разобраться самому
- Склонировать репозиторий, прогнать
cargo auditиcargo geigerпо зависимостям — 371 крейт, это быстро. - Запустить в Docker с ограниченной сетью (
--network none+--cap-drop=ALL), проверить выживаемость. - Прогнать fuzzer по CDP-интерфейсу — раз аутентификации нет, поверхность атаки открыта даже на loopback.
Gotchas
- «14 тысяч звёзд = безопасно» — нет. Звёзды не заменяют аудит.
- «На Rust = безопасно» — нет. Rust защищает от memory corruption, но не от логических уязвимостей вроде SSRF или insecure defaults.
- Pre-release зависимости (wreq) не должны попадать в production-сборку, но попадают.
- CDP без аутентификации — не проблема на десктопе, но критично на сервере.
- Автор с ником «h4ckf0r0day» — не индикатор злого умысла, но индикатор отношения к безопасности.
Obscura — технически впечатляющий проект с неприятными вопросами к происхождению и нулевой культурой безопасности. Хайп опережает зрелость, а запускать браузерный движок на сервере без аудита — плохая идея независимо от количества звёзд.