14.3 C
Москва
Пятница, 14 марта, 2025

Хакеры взломали Минфин США с помощью Unicode. Как это вообще стало возможным? — Tproger

Китайские хакеры взломали Минфин США через уязвимость PostgreSQL, связанную с Unicode. SQL-инъекция оставалась незамеченной 9 лет и позволила атакующим захватить контроль над сервером

30 декабря, пока большинство людей готовилось к встрече Нового года, Министерство финансов США столкнулось с куда менее праздничным событием — китайские хакеры проникли в их системы.

Согласно уведомлению, направленному в Конгресс, за атакой стояла группировка, спонсируемая государством (Advanced Persistent Threat, APT).

Однако самым удивительным стало то, каким именно способом взломщики проникли в защищённые серверы: всё произошло из-за SQL-инъекции, связанной с особенностями Unicode в PostgreSQL.

SQL-инъекция в PostgreSQL, которая оставалась незамеченной 9 лет

Критическая уязвимость была найдена в программе управления привилегированным доступом (PAM) от компании BeyondTrust, которая использовала PostgreSQL.

Около 3 млн iOS- и macOS-приложений могли быть атакованы через 10-летнюю «дыру»tproger.ru

Проблема заключалась в функции pg_escape_string, отвечающей за экранирование пользовательского ввода, и её вызове внутри PostgreSQL-библиотеки libpq.

Хакеры использовали два байта (c0 27), которые PostgreSQL ошибочно интерпретировал как часть валидного Unicode-символа. В результате этот механизм позволил атакующим внедрить неэкранированный одиночный апостроф (‘), открывший путь для SQL-инъекции.

Этот апостроф позволил хакерам захватить контроль над psql (CLI-интерфейсом PostgreSQL), а оттуда использовать команду ! для выполнения произвольного кода на серверах Минфина США.

Читать также:
Автор одного из самых популярных подкастов про кибербезопасность оказался мошенником — Tproger

Как такую уязвимость могли не заметить?

SQL-инъекции — одна из старейших и самых известных атак, которую разбирают в каждом учебнике по кибербезопасности. Однако эта конкретная уязвимость:

  1. Скрывалась на уровне Unicode — у PostgreSQL не было встроенной валидации корректности Unicode-символов в PQescapeStringInternal.
  2. Не представляла угрозы, пока не использовалась в командной строке psql — а это не самый частый сценарий.
  3. Оставалась незамеченной более 9 лет в одном из самых популярных open-source проектов.

Теперь, после раскрытия проблемы, PostgreSQL выпустил обновление, исправляющее баг в pg_utf_mblen.

Выводы: строки сложны, Unicode ещё сложнее

Эта история ещё раз доказывает, что обработка строк и кодировки — источник огромного количества неожиданных уязвимостей.

Простая ошибка в обработке Unicode могла оставить PostgreSQL уязвимым на протяжении почти десятилетия.

И напоследок забавный факт: вы можете стать владельцем собственного символа Unicode — например, Buffalo Wild Wings уже «усыновили» эмодзи 🍗, а бейсбольная команда Oakland A’s владеет ⚾, 🐘 и 🌳.

НОВОЕ НА САЙТЕ