메인 콘텐츠로 건너뛰기

CVE-2026-111497: 네이티브 Brotli 디코더 원격 코드 실행 및 메모리 노출

공지 ID: 2026-155-AWS
범위: AWS
콘텐츠 유형: 중요(주의 필요)
게시 날짜: 10/28/2026 15:00 PM PDT
마지막 업데이트 날짜: 10/30/2026 14:00 PM PDT

설명:

AWS는 Node.js의 2026년 10월 보안 릴리스에서 처음 해결된 네이티브 Brotli 압축 해제 라이브러리의 버퍼 오버플로인 CVE-2026-111497을 인지하고 있습니다. 특수하게 조작된 Brotli 압축 입력을 디코딩할 경우, 제3자가 영향을 받는 애플리케이션에서 코드를 실행하거나 프로세스 메모리를 읽을 수 있게 될 가능성이 있습니다. 이 문제는 Node.js 외의 Brotli 디코딩에도 영향을 미치며, 다른 벤더의 수정 사항이 아직 완전히 제공되지 않았습니다.

영향을 받는 AWS 서비스 정보는 아래에 제공됩니다. 자세한 정보를 입수하는 대로 이 공지를 업데이트하겠습니다.

현재 완화 조치 현황:

AWS Lambda

AWS Lambda 관리형 서비스는 영향을 받지 않습니다. .NET 및 Node.js용 Lambda 런타임은 이 문제의 영향을 받습니다.

Python, Ruby 및 OS 전용 provided.al2023용 Lambda 런타임에는 Brotli 라이브러리가 포함되지 않습니다. 이러한 상황에서 자체 함수 배포 시 Brotli 라이브러리를 포함하는 경우, 패치된 버전으로 재배포할 것을 권장합니다.

  • 런타임별 상태:
    - Node.js 22, 24, 26 - 컨테이너 기본 이미지: 업데이트됨. 지금 재빌드하고 재배포하세요. - ZIP 패키지, 1단계 및 2단계 완료.
    - .NET 8, 9(컨테이너 전용), 10 - 컨테이너 기본 이미지: 업데이트됨 - ZIP 패키지, 1단계 및 2단계 완료.
  • Node.js:
    - Node.js 24: Node.js 24.22.1 릴리스에서 알려진 회귀 문제가 발견되어, 처음에는 최신 Node.js 릴리스로 전환하는 대신 현재 안정 릴리스에 특정 문제를 해결하기 위한 업데이트를 적용했습니다. 해당 회귀 문제는 이제 24.22.2에서 수정되었습니다. 이 버전의 릴리스 과정을 진행 중이며, 1단계는 이미 완료되었고 2단계는 2026년 10월 31일에 완료될 예정입니다.
  • Node.js 18 및 20을 포함한 사용 중단 예정 런타임에는 보안 업데이트가 제공되지 않는다는 점에 유의하세요. 최신 버전으로 업데이트할 것을 권장합니다.
  • 업데이트 적용 방법:
    - 컨테이너 이미지: 업데이트된 기본 이미지를 사용할 수 있게 되면, 최신 기본 이미지에서 컨테이너 이미지 함수를 재빌드하고 재배포하세요.
    - ZIP 패키지: 관리형 런타임 업데이트는 다음 두 단계로 롤아웃됩니다.
         ○ 1단계: Lambda는 함수 생성 또는 업데이트 시(UpdateFunctionCode 또는 UpdateFunctionConfiguration API를 통해) 업데이트된 런타임을 적용합니다.
         ○ 2단계: Lambda는 자동 런타임 업데이트 모드를 사용하는 함수 중 아직 업데이트를 받지 않은 함수를 자동으로 업데이트합니다.

이러한 단계는 AWS 리전 전체에 걸쳐 웨이브 단위로 롤아웃됩니다. 현재 기존 릴리스 프로세스를 평소보다 빠르게 진행하고 있어 개별 리전의 배포 완료 시점을 예측할 수 없습니다.

1단계가 완료되면 함수 코드 또는 구성을 업데이트하여 패치된 런타임 버전을 가져올 수 있습니다. 변경 사항이 없는 업데이트만으로는 충분하지 않습니다. 변경을 트리거하는 쉬운 방법은 환경 변수를 추가하는 것입니다. 다음 bash 스크립트는 기존 환경 변수를 유지하면서 TRIGGER_RUNTIME_UPDATE 환경 변수를 추가하거나 업데이트하기 위해 AWS CLI를 사용합니다.

# 1. 함수 이름 설정
FUNCTION_NAME="my-function"

# 2. 현재 환경 변수를 JSON 문자열로 읽어오기
CURRENT_VARS=$(aws lambda get-function-configuration \
--function-name "$FUNCTION_NAME" \
--query "Environment.Variables" \
--output json)

# 3. 새 변수 병합
MERGED=$(echo "$CURRENT_VARS" \
| jq '
if . == null then {} else . end
| if .TRIGGER_RUNTIME_UPDATE then
.TRIGGER_RUNTIME_UPDATE = ((.TRIGGER_RUNTIME_UPDATE | tonumber) + 1 | tostring)
else
.TRIGGER_RUNTIME_UPDATE = "1"
end
')

# 4. 함수 구성 업데이트
aws lambda update-function-configuration \
--function-name "$FUNCTION_NAME" \
--environment "{\"Variables\": $MERGED}"
  • 함수가 업데이트되었는지 확인하는 방법: 런타임 패치 버전은 함수 로그의 INIT_START 라인에 표시됩니다. 이 라인은 각 실행 환경의 콜드 스타트 시마다 출력되며, 일반적으로 각 로그 스트림의 상단에 나타납니다. Node.js의 경우 nodejs:22.mainline.v157 이상(Node.js 22) 또는 nodejs:24.mainline.v114 이상(Node.js 24)을 찾습니다. process.version 속성은 Node.js 24에 대한 업데이트를 반영하지 않습니다. .NET의 경우 dotnet:8.mainline.v165 이상(.NET 8) 또는 otnet:10.mainline.v113 이상(.NET 10)을 찾습니다.


AWS Amplify

Node.js 22 및 Node.js 24에서 실행되는 AWS Amplify Hosting 컴퓨팅(서버 측 렌더링) 애플리케이션은 기본 관리형 런타임이 업데이트되면 보안 업데이트를 자동으로 수신합니다. 고객이 취해야 할 조치는 없습니다.

런타임 구성에서 22 이전의 Node.js 버전을 지정하는 경우, 이 보안 업데이트와 향후 업데이트를 수신하려면 지원되는 Node.js 버전(22 또는 24)으로 마이그레이션할 것을 권장합니다.


AWS App Runner

업데이트된 App Runner 관리형 Node.js 런타임이 2026년 10월 26일에 모든 AWS 리전에 배포되었습니다.

2026년 10월 26일 이후에 배포되지 않은 서비스: 서비스를 한 번 재배포합니다. 다음 배포에서는 구성 변경 없이 업데이트된 런타임을 적용합니다.

명시적으로 이전 런타임 버전에 고정된 서비스: 먼저 런타임 버전 고정을 업데이트한 후 재배포합니다. 재배포만으로는 고정된 서비스가 업데이트된 런타임으로 이동하지 않습니다.


Amazon CloudWatch Synthetics

Node.js 카나리: Node.js 카나리 런타임은 Lambda 관리형 런타임을 사용하며 위에서 설명한 1단계 및 2단계 업데이트를 동일하게 수신합니다. 자동 런타임 업데이트를 수신하는 카나리의 경우 조치가 필요하지 않습니다(목표일: 2026년 10월 30일).

Python Selenium 카나리: Python Selenium 카나리 런타임에는 Brotli 라이브러리가 포함됩니다. 업데이트가 진행 중입니다. 패치된 런타임 버전과 고객 조치 사항이 준비되면 이 공지를 업데이트하겠습니다.


AWS CodeBuild

  • CodeBuild 큐레이팅된 이미지의 업데이트가 진행 중입니다. 완료 목표: 2026년 10월 30일. 업데이트된 이미지에는 Node.js 22.23.4, 24.22.1, 26.12.1, Ubuntu libbrotli1 1.0.9-2ubuntu0.1/1.1.0-2ubuntu0.1, Amazon Linux 2023 brotli 1.1.0-1.amzn2023.0.2가 포함됩니다.
  • "항상 최신 이미지 사용"이 선택된 상태로 latest 태그를 사용하는 큐레이션된 이미지 및 온디맨드 AMI 빌드: 별도의 조치는 필요하지 않습니다. 다음 빌드부터 업데이트된 이미지를 사용합니다.
  • 특정 버전 또는 다이제스트에 고정된 큐레이팅된 이미지: 업데이트된 이미지를 참조하도록 업데이트합니다.
  • CodeBuild 큐레이팅된 기본 이미지에서 빌드된 사용자 지정 이미지: 업데이트된 기본 이미지에서 이미지를 다시 빌드합니다.
  • Node.js 18 또는 20을 선택하는 빌드 사양: 업데이트된 이미지에는 더 이상 Node.js 18 또는 20이 포함되지 않습니다. Node.js 22, 24 또는 26을 사용하도록 빌드 사양을 업데이트합니다.


AWS Elastic Beanstalk

  • Node.js 24.22.1 및 22.23.4를 포함하는 Elastic Beanstalk Node.js 플랫폼 버전 6.11.12가 2026년 10월 22일에 출시되었습니다.
  • 확인하려면 빌드에서 node --version, dpkg-query -W libbrotli1(Ubuntu) 또는 rpm -q brotli(Amazon Linux 2023)를 실행합니다.
  • 관리형 플랫폼 업데이트가 활성화된 환경: 다음 주간 유지 관리 기간 동안 사용자 환경이 수정된 플랫폼 버전으로 업데이트됩니다. 더 빨리 업데이트하려면 Elastic Beanstalk 콘솔의 관리형 업데이트 탭에서 업데이트를 적용합니다.
  • 기타 모든 환경: 환경을 플랫폼 버전 6.11.12 이상으로 업데이트합니다.
  • Node.js 18 또는 20을 사용하는 환경: 지원되는 Node.js 플랫폼 브랜치로 마이그레이션합니다.

확인하려면 환경 인스턴스에서 node --version을 실행합니다.


AWS Elemental MediaLive

  • AWS는 영향을 받는 라이브러리를 포함하는 AWS 관리형 MediaLive 구성 요소를 업데이트하고 있습니다. 고객이 취해야 할 조치는 없습니다


고객 관리형 Node.js 환경

Amazon EC2 인스턴스나 Amazon ECS 또는 Amazon EKS의 자체 컨테이너 등 AWS에서 자체 Node.js 빌드를 실행하고 관리하는 경우, 해당 환경을 업데이트할 책임은 고객에게 있습니다. Node.js 22.23.4, 24.22.1, 26.12.1 이상으로 업그레이드하세요. 이 문제는 Brotli를 디코딩하는 다른 언어와 애플리케이션에도 영향을 미치므로, 사용 중인 라이브러리와 애플리케이션에 Brotli 디코딩이 종속성으로 포함되어 있는지도 확인하세요.

AWS WAF를 사용한 완화 조치

즉시 업데이트할 수 없는 경우 AWS WAF를 사용하여 Brotli 콘텐츠 인코딩(Content-Encoding: br 헤더)을 사용하는 인바운드 요청을 차단하는 사용자 지정 규칙을 배포할 수 있습니다. 배포하기 전에 다음에 유의하세요.

  • AWS WAF는 인바운드 요청만 검사합니다. 이 제어 기능이 업스트림 서비스의 응답 등의 다른 소스의 Brotli 데이터에는 적용되지 않습니다.
  • Brotli로 인코딩된 요청을 차단하면 정상 트래픽을 포함하여 애플리케이션으로의 모든 Brotli 인코딩 업로드가 차단됩니다.
  • 이 규칙은 예제이며 모든 Brotli 인코딩 요청과 일치하지 않을 수 있습니다. 
  • 권장 배포 단계:
    1. Count 작업을 사용하여 규칙을 배포합니다.
    2. Amazon CloudWatch 지표 및 샘플링된 요청에서 일치하는 요청을 검토합니다.
    3. 규칙이 정상 트래픽에 영향을 주지 않는다고 확인되면 작업을 Block으로 변경합니다. 이를 수행하려면 "Count"를 다음으로 대체합니다. {} with "Block": {}.
    4. 기존 규칙 순서에 맞게 규칙 우선 순위를 설정합니다.

AWS WAF 규칙 예제:

{

  "Name": "Node2Shell_BROTLI",

  "Priority": 2,

  "Statement": {

    "RegexMatchStatement": {

      "RegexString": "^\\s*br\\s*$",

      "FieldToMatch": { "SingleHeader": { "Name": "content-encoding" } },

      "TextTransformations": [ { "Priority": 0, "Type": "LOWERCASE" } ]

    }

  },

  "Action": { "Count": {} },

  "RuleLabels": [ { "Name": "Node2Shell_Brotli" } ],

  "VisibilityConfig": {

    "SampledRequestsEnabled": true,

    "CloudWatchMetricsEnabled": true,

    "MetricName": "Node2Shell_BROTLI"

  }

}

 
 

차단 모드로 전환하려면 "Count"를 {} with "Block": {}(으)로 대체합니다.

AWS 관리 규칙 업데이트는 AWS WAF 관리 규칙 그룹 SNS 알림 및 AWS WAF 개발자 가이드를 통해 공지됩니다.

권장 조치

  • 지원 종료된 Node.js 버전(여기에는 Node.js 18 및 20이 포함됨)에서 실행 중인 워크로드를 지원되는 버전으로 마이그레이션합니다.
  • 고객 관리 환경의 경우 패치 관리 프로세스의 일부로 수정된 Node.js 릴리스로 업그레이드합니다.
  • 코드, 종속성 또는 계층에 자체 Brotli 라이브러리가 포함되어 있는지 확인하고, 수정 사항이 출시되면 이를 업데이트합니다. 영향을 받는 라이브러리나 애플리케이션에 아직 패치가 제공되지 않은 경우, 패치가 출시될 때까지 Brotli 디코딩을 비활성화합니다.

참고 사항:


보안 관련 질문이나 우려 사항이 있는 경우 aws-security@amazon.com 로 이메일을 보내 주세요.