🇰🇷 한글 설명
n8n-MCP의 SDK 임베더 경로 내 동기식 URL 검증기에서 IPv6 체크가 누락되어 SSRF 취약점이 발생합니다. 공격자는 IPv4-mapped IPv6 주소를 사용하여 클라우드 메타데이터 엔드포인트나 내부 네트워크에 접근할 수 있으며, 이 과정에서 n8n API 키가 유출될 수 있습니다.
💡 쉬운 설명
보안 검사를 우회하는 특수한 주소 형식을 사용하여 내부 네트워크나 클라우드 설정 정보에 몰래 접근할 수 있는 결함입니다. 이 과정에서 중요한 인증 키가 공격자에게 전달될 위험이 있습니다.
🇺🇸 원문 (English)
n8n-MCP is an MCP server that provides AI assistants access to n8n node documentation, properties, and operations. In versions 2.47.4 through 2.47.13, the SDK embedder path (N8NDocumentationMCPServer constructor, getN8nApiClient(), and validateInstanceContext()), the synchronous URL validator in SSRFProtection.validateUrlSync() had no IPv6 checks. IPv4-mapped IPv6 addresses such as http://[::ffff:169.254.169.254] bypassed the cloud-metadata, localhost, and private-IP range checks. An attacker able to supply an n8nApiUrl value could cause the server to issue HTTP requests to cloud metadata endpoints, RFC1918 private networks, or localhost services. Response bodies are returned to the caller (non-blind SSRF), and the n8nApiKey is forwarded in the x-n8n-api-key header to the attacker-controlled target. Projects with deployments embedding n8n-mcp as an SDK using N8NDocumentationMCPServer or N8NMCPEngine with user-supplied InstanceContext are affected. The first-party HTTP server deployment was not primarily affected — it has a second async validator (validateWebhookUrl) that catches IPv6 addresses. This issue has been fixed in version 2.47.14. If users are unable to upgrade immediately as a workaround they can validate URLs before passing to the SDK, restrict egress at the network layer, and reject user-controlled n8nApiUrl values.
📍 영향받는 시스템
n8n-MCP SDK (N8NDocumentationMCPServer 또는 N8NMCPEngine 사용) 버전 2.47.4 ~ 2.47.13
⚔️ 공격 벡터
사용자가 제어 가능한 n8nApiUrl 값에 IPv4-mapped IPv6 주소(예: http://[::ffff:169.254.169.254])를 입력하여 내부 서비스에 요청 전송
🛡️ 대응 방법
n8n-MCP를 버전 2.47.14 이상으로 업데이트하거나, URL 입력값 사전 검증 및 네트워크 계층의 외부 통신 제한 조치를 수행하십시오.
🔧 검증 코드
명령어 결과에 취약한 버전 범위(2.47.4~2.47.13)가 출력되면 해당 시스템은 취약한 상태입니다.
npm list n8n-mcp | grep -E 'n8n-mcp@2\.(4[7]\.[4-9]|4[7]\.[1][0-3])'