DEEP DIVE REPORT

CVE-2026-119408: n8n 폐기 코드 노드 경유 원격 코드 실행과 자동화 워크플로 서버 점검

SecurityDesk
• 2026.11.03 • 조회 2

자동화 워크플로 플랫폼 n8n에서 이미 폐기된 코드 실행 노드가 여전히 서버 안에서 동작할 수 있다는 점이 CVE-2026-119408로 보고되었습니다. 워크플로를 만들고 수정하고 외부에서 가져올 수 있는 인증된 사용자가, 격리 구조 바깥에서 동작하는 숨겨진 노드 타입을 워크플로에 집어넣으면 서버 측에서 코드가 실행될 수 있습니다. 공개된 개념 증명(PoC)이나 실제 악용 사례는 확인되지 않았지만, 패치 설치만으로 종료되지 않는 잔여 위험이 남아 있어 자동화 서버를 운영 중이라면 점검 대상입니다.

개요

개요 인포그래픽
n8n 보안 어드바이저리 GHSA-9p7v-45m2-wxgj와 CVE 기록이 공통으로 지적하는 핵심은 노드의 실행 위치입니다.

  • Function, Function Item, LangChain Code 노드는 폐기(deprecated) 처리된 구형 노드이지만, 사용자 코드를 작업 러너 격리(task runner isolation) 밖에서 실행하는 구조로 남아 있었습니다.
  • 이 노드 타입을 이름으로 지정해 워크플로를 저장·실행할 수 있는 인증된 사용자가 서버 측 임의 코드 실행을 유발할 수 있습니다.
  • 벤더가 배포 라인별로 지정한 수정 버전 2.42.6, 2.43.3, 2.44.0, 3.0.1에서는 세 노드가 기본 차단되고, 이 노드를 추가하거나 수정하는 워크플로 저장이 거부되도록 바뀌었습니다. CVE 기록은 3.0.1 이전 3.x 계열을 취약 버전으로 적시합니다.
  • 이미 이 노드를 포함해 저장된 워크플로는 수정 후에도 계속 실행된다고 안내됩니다. 따라서 버전 번호 확인만으로 위험 판단이 끝나지 않습니다.
  • CVE 레코드는 이 취약점의 정량 평가로 CVSS 4.0 기준 8.7, CVSS 3.1 기준 8.8 점수를, 분류로 CWE-653을 적시합니다.

영향 범위

영향 범위는 버전과 워크플로 내용, 권한, 세 축으로 나눠 봐야 합니다.

  • 버전 축: VulnCheck advisory는 2.42.6, 2.43.3, 3.0.1 이전을 대상으로 적시하고, CVE 기록은 3.0.1 이전 3.x 계열을 취약 버전으로 명시합니다. 벤더 어드바이저리가 밝힌 수정 버전은 2.42.6, 2.43.3, 2.44.0, 3.0.1입니다.
  • 워크플로 내용 축: Function, Function Item, LangChain Code 노드를 포함해 저장된 워크플로가 있는 인스턴스는 이미 저장된 워크플로가 계속 실행된다는 안내 때문에 버전 확인만으로 노출이 정리되지 않습니다.
  • 권한 축: 워크플로 생성·수정·가져오기 권한을 가진 인증된 사용자가 접근할 수 있는 인스턴스가 공격의 전제 조건입니다.

CVE 기록과 벤더 어드바이저리가 공통으로 적시하는 악용 전제 조건은 워크플로를 생성하거나 수정하거나 가져올 수 있는 인증된 사용자입니다. 그래서 권한 축의 점검 범위는 계정에 부여된 워크플로 생성·수정·가져오기 권한 현황과, 외부에서 워크플로를 받아들이는 가져오기 경로가 열려 있는지 확인하는 것에 맞춰야 합니다.

기술적 분석

격리 구조 바깥에 남은 세 개의 코드 노드

어드바이저리가 밝힌 실행 구조는 노드마다 다릅니다.

  • Function 노드와 Function Item 노드는 사용자 코드를 vm2 샌드박스에서 실행합니다.
  • LangChain Code 노드는 사용자 코드를 n8n 메인 프로세스(main process)에서 실행합니다.
  • 세 노드 모두 작업 러너 격리 바깥에서 동작합니다.

운영 관점의 점검 범위를 정할 때도 이 구분은 그대로 두고 보는 편이 자료에 부합합니다. Function 및 Function Item 노드는 vm2 샌드박스에서, LangChain Code 노드는 n8n 메인 프로세스에서 사용자 코드를 실행하지만, 세 노드 모두 작업 러너 격리(task runner isolation) 밖에서 동작한다는 것이 CVE 기록과 벤더 어드바이저리가 함께 적시하는 공통 조건입니다. 벤더 어드바이저리는 이 구조 자체를 취약점으로 설명하므로, 세 노드 타입이 모두 동일한 취약점의 범위로 다뤄집니다.

패치 이후에 차단되고, 남는 것

수정 버전의 동작은 두 갈래입니다.

  • 이 노드들을 추가하거나 수정하는 워크플로 저장은 거부됩니다. n8n 2.42.6 릴리스 노트에도 core: Block create/update of workflows with deprecated nodes 항목이 명시되어 있습니다.
  • 이미 해당 노드를 포함해 저장된 워크플로는 계속 실행됩니다.

여기서 파생되는 운영 판단은 조건부입니다. 업그레이드만 진행하고 워크플로 인벤토리를 넘겨보지 않았다면, 신규 저장에만 작동하는 차단 로직 때문에 이미 저장된 워크플로에 대한 검토가 빠지게 됩니다. 반대로 워크플로 정의를 텍스트로 보관하고 있다면, 이 노드를 추가·수정하는 저장이 거부되는 수정 버전의 동작을 기준으로 현재 정의에 구형 노드가 남아 있는지를 기계적으로 대조할 수 있습니다.

인증된 권한이 악용의 전제 조건

공개 PoC와 실제 악용 사례는 조사 시점에 확인되지 않았습니다. 악용의 전제 조건은 워크플로 생성·수정·가져오기 권한을 가진 인증된 계정입니다. CVE 기록은 워크플로를 생성하거나 수정하거나 가져올 수 있는 인증된 사용자가 이 숨겨진 노드 타입을 지정한 워크플로로 코드 실행이 가능하다고 적시하고, 벤더 어드바이저리도 워크플로를 생성하거나 수정할 권한이 있는 인증된 사용자를 언급합니다.

따라서 근거가 직접 지목하는 점검 대상은 다음 세 가지 권한 동작으로 정리할 수 있습니다.

  • 워크플로 생성 권한이 부여된 계정
  • 워크플로 수정 권한이 부여된 계정
  • 외부에서 워크플로·템플릿을 받아들이는 가져오기(import) 경로

CVE 레코드는 CVSS 4.0 기준 8.7, CVSS 3.1 기준 8.8 점수를 적시하고, 악용 전제 조건으로 워크플로 생성·수정·가져오기 권한을 가진 인증된 사용자를 명시합니다. 점수를 산정한 세부 근거는 전달 자료에 없으므로, 운영 우선순위는 점수 하나보다 우리 인스턴스에서 누가 그 권한을 가지고 있는지와 가져오기 경로가 열려 있는지를 먼저 확인해 정하는 편이 확인된 전제 조건에 맞습니다.

대응 방안

지금 확인해야 할 것

  • 실행 중인 n8n 버전을 확인하고, 벤더가 배포 라인별로 지정한 수정 버전 목록(2.42.6, 2.43.3, 2.44.0, 3.0.1)과 현재 사용 중인 라인을 기준으로 대조합니다.
  • 저장·실행 중인 워크플로 정의를 스캔해 Function, Function Item, LangChain Code 노드 타입이 남아 있는지 목록화합니다. 이미 저장된 워크플로는 패치 후에도 계속 실행되므로 목록화가 선행되어야 합니다.
  • 워크플로 생성·수정·가져오기 권한이 누구에게 부여되어 있는지 확인합니다. 악용의 전제 조건으로 이 권한이 적시되어 있고, 벤더도 임시 완화로 워크플로 생성·편집 권한 제한을 권고합니다.

업그레이드가 어렵다면 적용하는 임시 완화

벤더는 임시 완화로 NODES_EXCLUDE 환경 변수에 n8n-nodes-base.function, n8n-nodes-base.functionItem, @n8n/n8n-nodes-langchain.code를 추가해 세 노드의 사용을 막는 방법을 안내합니다. 같은 임시 완화 항목으로 워크플로 생성·편집 권한 제한도 함께 권고합니다. 벤더는 이 두 가지를 임시 완화를 위한 조치로 제시하므로 업그레이드를 대체하지 않으며, 기존 저장 워크플로가 계속 실행된다는 안내는 별도로 확인해야 합니다.

이후에도 이어야 할 조치

  • n8n을 벤더 어드바이저리가 배포 라인별로 적시한 수정 버전으로 업그레이드해 구형 노드 기본 차단과 신규 저장 거부 동작을 활성화합니다. 어드바이저리는 2.42.6, 2.43.3, 2.44.0, 3.0.1 각 버전에서 세 노드가 기본적으로 폐기·차단된다고 명시하고, CVE 기록은 3.0.1 이전 3.x 계열을 취약 버전으로 적시합니다. 따라서 버전 확인은 여러 번호를 하나의 이상 기준으로 묶어 비교하는 방식이 아니라, 현재 운영 중인 배포 라인이 그 라인에 지정된 수정 버전에 도달했는지를 기준으로 해야 합니다. 예를 들어 2.43.x 라인을 사용 중이라면 2.43.3 미만 버전은 아직 수정되지 않은 버전으로 봐야 하며, 이 경우 3.0.1이라는 더 큰 번호와 비교해 수정 완료로 판단해서는 안 됩니다.
  • Function, Function Item, LangChain Code 노드를 포함해 저장된 워크플로가 무엇인지 목록으로 정리해 관리 대상에 올려둡니다. 벤더 어드바이저리가 적시하듯 이미 이 노드를 포함해 저장된 워크플로는 계속 실행되기 때문에, 버전 확인만으로는 남은 대상을 특정할 수 없습니다.
  • 악용 전제 조건으로 워크플로 생성·수정·가져오기 권한이 적시되어 있다는 점을 근거로, 워크플로 편집 권한 부여 기준을 정기적으로 재검토하고 외부에서 워크플로를 받아들이는 경로의 운영 절차를 점검합니다.

이 글의 한계

  • CVE 레코드에 적시된 CVSS 4.0 8.7, CVSS 3.1 8.8 점수는 확인할 수 있지만, 그 점수를 산정한 세부 근거와 벤더가 별도로 제시한 심각도 등급은 전달 자료에 포함되지 않았습니다. 따라서 정량 등급과 벤더 판단을 항목 단위로 직접 대응시키는 비교는 하지 않았습니다.
  • CISA KEV 등재 여부와 실제 악용 사례는 조사 시점에 확인되지 않았습니다.
  • CVE 기록의 설명 문구가 중간에 끊겨 영향 서술 전체를 원문으로 확인할 수는 없으나, 벤더 어드바이저리가 동일한 메커니즘을 일관되게 설명하고 있어 핵심 원인은 확정적으로 볼 수 있습니다.
  • 수정 버전 적용 후 이미 저장된 워크플로에서 구형 노드가 어떤 조건으로 계속 실행되는지에 대한 상세 서술은 자료에 없어, 잔여 노출의 정확한 범위와 처리 계획은 각 운영 환경에서 확인이 필요합니다.

참고자료

함께 읽으면 좋은 글

본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

로그인

아직 댓글이 없습니다.

첫 번째 댓글을 작성해보세요!

IT 도구 서랍

→ Unix: 2025-01-15T09:30:00
→ 날짜: 1736934600

→ ASCII: ABC
→ 문자: 65 66 67

ASCII 코드표 — 클릭하면 입력란에 추가

DecHex약어설명
DecHex문자
DecHex문자

→ 유니코드: 홍길동
→ 문자: \ud64d\uae38\ub3d9