
CVE-2025-2945용 익스플로잇 및 테스트 스탠드
이것은 CVE-2025-2945에 대한 제 연구입니다. 이 저장소에는 postgress와 취약한 pgadmin이 포함된 테스트 스탠드와 익스플로잇이 포함되어 있습니다.
유용한 링크:
Python으로 작성된 pgAdmin 백엔드에는 적절한 입력 검증이 부족한 두 개의 엔드포인트가 있습니다. 엔드포인트는 다음과 같습니다:
/sqleditor/query_tool/download - query_commited 매개변수/cloud/deploy - high_availability 매개변수sqleditor의 코드를 살펴보겠습니다:
for key, value in data.items():
if key == 'query':
sql = value
if key == 'query_commited':
query_commited = (
eval(value) if isinstance(value, str) else value
)
여기서 볼 수 있듯이 query_commited의 값이 eval() 함수에 직접 전달됩니다. eval 문서를 참조하세요.
pgacloud의 코드도 살펴보세요:
def _create_google_postgresql_instance(self, args):
credentials = self._get_credentials(self._scopes)
service = discovery.build('sqladmin', 'v1beta4',
credentials=credentials)
high_availability = \
'REGIONAL' if eval(args.high_availability) else 'ZONAL'
여기도 같은 문제입니다.
여전히 이러한 엔드포인트에 접근하려면 유효한 자격 증명과 pgadmin에 대한 액세스 권한이 필요합니다. 그러나 액세스 권한이 있는 공격자는 eval에 임의의 값을 전달할 수 있습니다. 이는 임의의 Python 원라이너를 실행하는 것과 같습니다.
익스플로잇은 매우 간단합니다. exploit/src/main.py를 참조하세요. 리버스 셸을 얻으려면 config를 업데이트하는 것을 잊지 마세요.
스탠드를 설정하려면 다음을 실행하세요:
cd stand
docker compose up -d
그게 전부입니다. 이제 pgAdmin은 http://localhost:8080에서 접근할 수 있습니다. 기본 자격 증명은 다음과 같습니다:
[email protected]
admin
.env 파일과 stand/init-db/01-init.sql을 자유롭게 편집하세요.
prod by I3r1h0n.