🇰🇷 한글 설명
AutoGPT의 SendEmailBlock에서 SMTP 서버 주소와 포트 입력값을 검증 없이 smtplib.SMTP()에 직접 전달하여 SSRF 보호를 우회합니다. 인증된 사용자가 내부 네트워크 주소로 TCP 연결을 시도하면 서버의 배너 정보가 예외 메시지에 포함되어 공격자가 내부 서비스를 식별할 수 있습니다.
💡 쉬운 설명
AutoGPT의 이메일 기능이 보안 검사를 건너뛰고 직접 네트워크에 연결합니다. 로그인한 사용자가 내부 서버와 포트를 직접 스캔할 수 있게 됩니다.
🇺🇸 원문 (English)
AutoGPT is a workflow automation platform for creating, deploying, and managing continuous artificial intelligence agents. In versions 0.1.0 through 0.6.51, SendEmailBlock in autogpt_platform/backend/backend/blocks/email_block.py accepts a user-supplied smtp_server (string) and smtp_port (integer) as per-execution block inputs, then passes them directly to Python's smtplib.SMTP() to open a raw TCP connection with no IP address validation. This completely bypasses the platform's hardened SSRF protections in backend/util/request.py — the validate_url_host() function and BLOCKED_IP_NETWORKS blocklist that every other block uses to block connections to private, loopback, link-local, and cloud metadata addresses. An authenticated user on a shared AutoGPT deployment can use this to perform non-blind internal network port scanning and service fingerprinting: smtplib reads the target's TCP banner on connect and embeds it in the exception message, which is persisted as user-visible block output via the execution framework. This issue has been fixed in version 0.6.52.
📍 영향받는 시스템
AutoGPT 0.1.0 ~ 0.6.51 (backend/blocks/email_block.py의 SendEmailBlock)
⚔️ 공격 벡터
인증된 사용자가 워크플로우 내 SendEmailBlock의 smtp_server 매개변수에 내부 IP(예: 192.168.x.x, 10.x.x.x, 메타데이터 엔드포인트)를 입력 후 실행하여 TCP 배너 정보 추출
🛡️ 대응 방법
AutoGPT를 0.6.52 이상으로 업그레이드하여 smtp_server 입력에 validate_url_host() 검증 적용
🔧 검증 코드
설치된 버전이 0.6.51 이하면 취약, 0.6.52 이상이면 패치됨
pip show autogpt-platform 2>/dev/null | grep -i version || pip index versions autogpt-platform 2>/dev/null | head -1