Опубликованы результаты сканирования пакетов в репозитории PyPI (Python Package Index) на предмет наличия забытых в коде ключей доступа к Amazon Web Services (AWS). Провести проверку побудил прошлогодний инцидент с утечкой AWS-ключей компании InfoSys. Как оказалось случай не единичный и в коде представленных в PyPi пакетов удалось выявить ещё 57 действующих ключей, которые присутствовали среди прочего в проектах таких крупных компаний, как Amazon, Intel, Terradata, General Atomics, Top Glove и Delta Lake, а также в репозиториях австралийского правительства и университетов Сендфорда, Портланда и Луизианы.
Для поиска ключей в коде использовалась утилита ripgrep с регулярным выражением “((?:ASIA|AKIA|AROA|AIDA)([A-Z0-7]{16}))” для выявления наличия идентификаторов ключей и “[a-zA-Z0-9+/]{40}” для выявления самого ключа. Учитывались только действующие ключи, актуальность которых проверялась при помощи штатной CLI-утилиты aws. Проверка всего репозитория заняла 27 часов.
Самый старый из найденных ключей присутствовал в коде с 2013 года, а самый новый с 20 декабря 2022 года. В 11 случаях были найдены root-ключи (arn:aws:iam:..:root), в 18 – ключи непривилегированных пользователей (arn:aws:iam:..:user/пользователь), а в 22 – ключи доступа к сервису (arn:aws:iam:..:user/сервис).
Утечки разделены на три категории – случайно забытые в коде ключи, тестовые данные и преднамеренное использование (как правило для загрузки временных файлов Amazon S3). В качестве примеров случайно забытых ключей упоминается ключ компании Terradata, который был удалён из кода, но случайно забыт в специфичном для одной из платформ выпуске. В случае с компанией Amazon ключ был оставлен в amazon_pay SDK 2.5.1 в составе одного из тестовых сценариев.
После завершения эксперимента дополнительно был создан инструментарий для постоянного отслеживания утечек ключей в новых пакетах, публикуемых в PyPi, HexPM и RubyGems. Инструментарий вызывается через
Github Actions и в случае выявления утечек автоматически отправляет информацию о проблеме в репозиторий и в AWS.