Haraka 버전 3.1.4 미만
공격자가 '__proto__'라는 특수 키워드를 메일 헤더에 포함시켜 전송함으로써 Node.js의 프로토타입 오염(Prototype Pollution) 메커니즘을 통해 서버 프로세스의 크래시를 유도합니다.
Haraka를 최신 버전인 3.1.4 이상으로 업데이트하십시오.
이 코드는 Python 3 환경에서 실행 가능하며, 시스템에 설치된 npm 글로벌 패키지 목록을 통해 Haraka의 버전을 확인합니다. 실행을 위해 npm이 설치되어 있어야 하며, 권한 문제 발생 시 sudo 또는 관리자 권한으로 실행하십시오.
import subprocess
import json
import re
def check_haraka_version():
try:
# 글로벌 설치된 haraka 버전 확인
result = subprocess.check_output(['npm', 'list', '-g', 'haraka'], stderr=subprocess.STDOUT).decode('utf-8')
match = re.search(r'haraka@([\d.]+)', result)
if match:
version_str = match.group(1)
version_parts = [int(x) for x in version_str.split('.')]
# 버전 비교 (3.1.4 미만인지 확인)
if version_parts < [3, 1, 4]:
return {"result": "취약", "reason": f"설치된 Haraka 버전({version_str})이 패치 버전(3.1.4)보다 낮습니다."}
else:
return {"result": "양호", "reason": f"설치된 Haraka 버전({version_str})이 패치 버전(3.1.4) 이상입니다."}
else:
return {"result": "양호", "reason": "시스템에서 Haraka 패키지를 찾을 수 없습니다."}
except FileNotFoundError:
return {"result": "양호", "reason": "npm 명령어를 찾을 수 없어 Haraka가 설치되지 않은 것으로 판단됩니다."}
except Exception as e:
return {"result": "양호", "reason": f"검사 중 오류 발생: {str(e)}"}
print(json.dumps(check_haraka_version()))
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H