OWASP Top 10 и атаки на цепочку поставок
До этого мы смотрели на отдельные атаки. Этот урок поднимает взгляд на
уровень выше. Сначала
OWASP Top 10
как общая карта классов уязвимостей, потом отдельный большой сюжет:
угроза приезжает не из браузера, а из твоего же node_modules.
Идея: уязвимость как класс, а не как баг
Отдельный баг это “вот здесь забыли экранировать”. Класс уязвимости это “мы попросту вставляем недоверенный вывод в HTML без защиты”. OWASP группирует именно классы, и это даёт две полезные вещи.
Во-первых, общий язык. Сказать “у нас Broken Access Control” в ревью понятнее и продуктивнее, чем перечислять десять отдельных эндпоинтов. Во-вторых, карту для threat modeling: проходишь по десятке и спрашиваешь, закрыт ли каждый класс, а не пытаешься вспомнить все возможные баги наугад. Подробно threat modeling в последнем уроке раздела, здесь Top 10 это тренировка смотреть классами.
Разбор OWASP Top 10
Пройдём по актуальной редакции (2021), привязывая к уже знакомым атакам. Цифры это не приоритет твоего проекта, а частота в индустрии.
- A01 · Broken Access Control. Номер один. Пользователь делает то, что
ему не положено: меняет чужой
idв URL и видит чужой заказ (IDOR), дёргает админский эндпоинт. Лечится проверкой прав на сервере на каждый объект, не на фронте. Подробно про модели доступа в уроке Auth модели и фронтенд. - A02 · Cryptographic Failures. Слабый или отсутствующий крипто: пароли без соли, секреты в открытом виде, HTTP вместо HTTPS. Сюда же утечки данных из прошлого урока.
- A03 · Injection. SQL injection, XSS, command injection. Тот самый класс конкатенации данных и кода из первых двух уроков.
- A04 · Insecure Design. Дыра не в коде, а в самом замысле: например, восстановление пароля по вопросу “девичья фамилия матери”. Лечится threat modeling на этапе дизайна, а не патчем.
- A05 · Security Misconfiguration. Дефолтные пароли, открытые
админки, подробные стек-трейсы в проде, забытый
unsafe-inlineв CSP. Сюда же XXE. - A06 · Vulnerable and Outdated Components. Устаревшая зависимость с известной CVE. Прямой мост ко второй половине урока.
- A07 · Identification and Authentication Failures. Слабая аутентификация: нет rate limiting на логин, session fixation, плохая работа с токенами.
- A08 · Software and Data Integrity Failures. Доверие коду и данным без проверки целостности. Сюда входят insecure deserialization и атаки на цепочку поставок, наш главный сюжет ниже.
- A09 · Security Logging and Monitoring Failures. Атаку не замечают, потому что ничего не логируется. Про accounting в уроке про AAA и экзотику.
- A10 · Server-Side Request Forgery (SSRF). Сервер по просьбе пользователя ходит на произвольный URL, в том числе во внутреннюю сеть и к метаданным облака. Мы касались этого в path traversal.
Заметь, как почти каждый пункт это уже знакомая атака под новым именем. Top 10 не добавляет новых знаний, он наводит порядок и подсказывает, что проверить.
Цепочка поставок: где она ломается
Теперь подробно про A06 и A08, потому что это самый недооценённый вектор. Цепочка поставок это путь код, зависимости, сборка, деплой. Твой собственный код это крошечная вершина айсберга: под ней сотни транзитивных пакетов, которые ты никогда не читал, но которые выполняются с твоими правами.
Где она ломается:
- Typosquatting:
пакет
lodahsвместоlodash, который ты поставишь по опечатке. - Захват maintainer-аккаунта. У легитимного популярного пакета угоняют
npm-аккаунт (часто через утёкший токен или фишинг) и публикуют
заражённую версию. Так взламывали
event-stream,ua-parser-js,coa. Десятки тысяч проектов получают зловред в очередном обновлении. - Post-install hooks:
postinstall-скрипт пакета выполняется при установке. Это произвольный код на машине разработчика или на CI-runner, ещё до запуска приложения. - Dependency confusion: публичный пакет с именем твоего внутреннего, подсунутый из публичного registry.
Особенность в том, что атака пассивная для жертвы: ты не делаешь ничего
опасного, просто запускаешь npm install или npm update, как всегда. И
поскольку CI обычно имеет доступ к prod-секретам и токенам публикации,
скомпрометированный пакет на runner это потенциально компрометация всего.
дальше после входа
Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.
Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.