В критически важных приложениях обнаружен опасный код

В критически важных приложениях обнаружен опасный код

Оказывается, не только разработчики Android-приложений грешат неграмотным внедрением SSL, но подобные ошибки присутствуют в программах ведущих софтверных компаний, включая Amazon и Paypal.

Неграмотная процедура проверки SSL-сертификатов обнаружена в критически важных приложениях, SDK, Java middleware, банковском софте и т.д., что открывает перед злоумышленниками возможности для MiTM-атаки — ничего хуже этого и представить невозможно, считают исследователи из Стэнфордского и Техасского университетов, которые опубликовали научную работу «Самый опасный код в мире: проверка SSL-сертификатов вне браузера». Достоин упоминания тот факт, что группа американских учёных работала под руководством кандидата наук Техасского университета Виталия Шматикова, пишет xakep.ru.

Итак, исследователи обнаружили некорректную процедуру SSL-валидации в ряде очень серьёзных программ:

Java-библиотека Amazon EC2 и все облачные клиенты на её основе;SDK Amazon и SDK Paypal, которые отвечают за передачу платёжных данных от торговой площадки к платёжному гейту;движки интернет-магазинов osCommerce, ZenCart, Ubercart и PrestaShop;код AdMob в мобильных веб-сайтах;мобильное приложение банка Chase и некоторые другие приложения и библиотеки под Android;Java middleware для веб-сервисов, включая Apache Axis, Axis 2, Codehaus XFire и библиотеку Pusher для Android, а также все приложения, которые используют перечисленное middleware.

В качестве примера безалаберности можно привести фрагмент исходного кода банковского приложения Chase.

public final void checkServerTrusted(X509Certificate[]
paramArrayOfX509Certificate, String paramString)
{
if ((paramArrayOfX509Certificate != null) && (
paramArrayOfX509Certificate.length == 1))
paramArrayOfX509Certificate[0].checkValidity();
while (true)
{
return;
this.a.checkServerTrusted(
paramArrayOfX509Certificate, paramString);
}
}

Любое SSL-соединение, установленное каждой из перечисленных программ, не является безопасным. Ключевая проблема лежит не столько в низкой квалификации разработчиков, сколько в плохом дизайне программных интерфейсов для реализации SSL (таких как JSSE, OpenSSL и GnuTLS) и библиотек для передачи данных (таких как cURL). Эти API и библиотеки сложны для обычного программиста, предлагая ему слишком путаный набор настроек и опций.

Например, в cURL есть несколько параметров для CURL_SSL_VERIFYHOST. Параметр VERIFYHOST=0 интуитивно понятен: он отключает проверку сертификата. Параметр VERIFYHOST=2 выполняет корректную проверку и сверяет имя хоста, указанное в сертификате, с именем хоста, который предъявляет сертификат. А вот параметрVERIFYHOST=1 (VERIFYHOST=TRUE) делает нечто очень странное: он проверяет, что сертификат принадлежит какому-то хосту, а затем принимает его от любого хоста. Понятно, что многие программисты не ожидали от cURL такой «подставы». Кстати, разработчик cURL Дэниел Стенберг вчера уже высказался по этому поводу. Ему после 10+ лет работы над cURL очень обидно слышать подобные обвинения, тем более что за все эти годы никто ни разу не предлагал изменить параметры для CURL_SSL_VERIFYHOST.

По результатам анализа ситуации с реализацией SSL в различных приложениях Шматиков с коллегами выработали ряд рекомендаций, в том числе они рекомендуют использовать специальное программное обеспечение для проверки корректности программного кода и пентестинга: например, программа TLSPretense. Есть также чёткая инструкция, как реализовать проверку SSL-сертификатов с помощью OpenSSL и репозиторий примеров правильного кода SSL Conservatory.

Атакующие взломали популярный сканер Trivy через GitHub-теги

Одна из самых неприятных историй последних дней развернулась вокруг Trivy — популярного сканера уязвимостей от Aqua Security, который используют разработчики и DevOps-команды по всему миру. Атакующие смогли скомпрометировать почти все версии инструмента в рамках атаки на цепочку поставок, и последствия здесь могут быть действительно серьёзными.

О проблеме публично сообщил мейнтейнер Trivy Итай Шакури. По его словам, если есть хоть малейшее подозрение, что в пайплайне запускалась скомпрометированная версия, все секреты нужно считать утёкшими и срочно ротировать.

Исследователи из Socket и Wiz выяснили, что внедрённый зловред не просто подменял работу Trivy, а параллельно запускал настоящий сканер и свою вредоносную нагрузку. То есть внешне всё могло выглядеть вполне штатно, пока внутри шёл сбор конфиденциальных данных.

По данным исследователей, зловред прочёсывал CI/CD-пайплайны, машины разработчиков и окружение в поисках GitHub-токенов, облачных учётных данных, SSH-ключей, Kubernetes-токенов и других секретов. Всё найденное он архивировал, шифровал и отправлял на сервер, контролируемый атакующими.

Особенно неприятно то, как именно была проведена атака. Вместо привычного сценария с добавлением нового коммита или релиза злоумышленники использовали украденные учётные данные, чтобы привязать уже существующие теги к вредоносным коммитам.

Под удар попали 75 тегов в trivy-action и ещё семь тегов setup-trivy. Среди затронутых версий оказались и очень распространённые варианты вроде @0.34.2, @0.33 и @0.18.0. По имеющейся информации, незатронутой осталась только версия @0.35.0.

Именно это делает инцидент особенно опасным. Если воркфлоу в GitHub Actions ссылался на один из таких тегов, при запуске Trivy он автоматически подтягивал уже не легитимный код, а вредоносную подмену. Компрометация могла произойти просто в момент очередного штатного сканирования.

По данным Wiz, у атакующих был и запасной канал вывода данных. Сначала зловред пытался отправить собранную информацию на домен scan.aquasecurtiy[.]org. Если это не удавалось, он пробовал использовать украденный GITHUB_TOKEN, чтобы создать репозиторий tpcp-docs и выгрузить данные туда.

Если же зловред понимал, что работает не в пайплайне, а на машине разработчика, он дополнительно записывал кодированный base64 дроппер на Python для закрепления.

Отдельно настораживает и предыстория атаки. Массовая компрометация началась в четверг, но, как пояснил Итай Шакури, её корни уходят в более ранний инцидент — взлом расширения VS Code Aqua Trivy, произошедший ещё в прошлом месяце. Тогда атакующие получили учётные данные с правами записи в GitHub-аккаунт Trivy.

После того случая мейнтейнеры ротировали токены и другие секреты, но процесс, как выяснилось, не устранил все остаточные артефакты доступа. Именно это, по версии исследователей, и позволило атакующим продолжить аутентифицированные операции без необходимости взламывать сам GitHub.

При этом интересно, что атакующие аккуратно подменяли ссылки тегов на новые коммиты, копируя метаданные старых коммитов: автора, почту, дату и даже текст сообщения. За счёт этого компрометация выглядела максимально правдоподобно.

RSS: Новости на портале Anti-Malware.ru