0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CVE-2026-13763対応でAWS WAF付きALBのHTTP/2関連設定をCLIで洗い出した

0
Last updated at Posted at 2026-07-03

CVE-2026-13763対応でAWS WAF付きALBのHTTP/2関連設定をCLIで洗い出した話

はじめに

やおよろ~!!!最近、今更過ぎる「超かぐや姫!」にハマっている滝田です。

啓蒙活動として最近出てた脆弱性の対象リストアップが面倒くさかったので記事にしておきます。

本題ですがAWS WAF の HTTP/2 リクエストボディ検査に関するSecurity Bulletinが公開されていたため(たまたまXで言ってる人がいて知った)、影響確認の一環としてAWS CLIで対象リソースを洗い出しました。

対象の CVE は以下です。

本記事では、このうち CVE-2026-13763 に関する確認として、AWS WAF が紐づいている ALB と、その配下のターゲットグループを確認する方法をまとめます。

bulletinはこいつです。
https://aws.amazon.com/jp/security/security-bulletins/2026-048-aws/

確認したかったこと

今回確認したかった内容は以下です。

  • AWS WAF が紐づいている ALB の有無
  • WAF付きALBに紐づくターゲットグループ
  • ターゲットグループ属性内の HTTP/2 / WAF 関連設定
  • 追加確認が必要な対象

いきなり設定変更を行うのではなく、まずは影響確認対象の棚卸しを目的としています。

注意点

このスクリプトでは、確認結果として ReviewStatus を出力します。

以前は Judgement のような列名にすることも考えましたが、Judgement だと OK / NG の判定をしているように見えます。(というかv1で仮作成した時はそうしていた)

今回のスクリプトで実施しているのは、あくまで HTTP/2 / WAF 関連属性が確認できるかどうかの確認です。

そのため、出力は以下のようにしています。

ReviewStatus 意味
ATTRIBUTE_FOUND HTTP/2 / WAF 関連属性が確認できた
ATTRIBUTE_NOT_FOUND HTTP/2 / WAF 関連属性が確認できなかった

ATTRIBUTE_NOT_FOUND は、即時の要対処を意味するものではありません。

あくまで、追加確認が必要な対象として扱います。

本スクリプトでは WAF付きALB配下のターゲットグループを確認対象にしているため、HTTP/2 を利用していないターゲットグループも含まれる可能性があります。

そのため、ATTRIBUTE_NOT_FOUND が出力された場合は、後続確認としてターゲットグループの ProtocolVersion やアプリケーションの通信特性を確認します。

前提

実行環境には以下が必要です。

  • AWS CLI
  • jq
  • Bash
  • AWSリソースを参照できる権限

参照権限としては、主に以下を利用します。

ec2:DescribeRegions
elasticloadbalancing:DescribeLoadBalancers
elasticloadbalancing:DescribeTargetGroups
elasticloadbalancing:DescribeTargetGroupAttributes
wafv2:GetWebACLForResource

ここまで書いておいてなんなんですが、Cloudshell使えるならそっちでやった方が早いです。
私はCloudshellでやりました!!

確認スクリプト

#!/bin/bash
# CVE-2026-13763 対応確認スクリプト
# WAF付きALBを対象に、HTTP/2 / WAF関連属性の状態を確認する
#
# 注意:
# ReviewStatus は OK / NG の判定ではなく、関連属性を確認できたかどうかを示す。
# ATTRIBUTE_NOT_FOUND は即時の要対処ではなく、追加確認対象として扱う。

set -euo pipefail

OUT="alb_waf_http2_check_$(date +%Y%m%d_%H%M%S).csv"

echo "Region,ALBName,TargetGroupName,WAFName,HTTP2_WAF_Attribute,ReviewStatus" > "$OUT"

REGIONS=$(aws ec2 describe-regions --query "Regions[].RegionName" --output text)

for REGION in $REGIONS; do
  echo "Checking region: $REGION" >&2

  ALBS=$(aws elbv2 describe-load-balancers \
    --region "$REGION" \
    --query "LoadBalancers[?Type=='application'].[LoadBalancerArn,LoadBalancerName]" \
    --output text 2>/dev/null || true)

  [ -z "$ALBS" ] && continue

  while read -r LB_ARN LB_NAME; do
    [ -z "${LB_ARN:-}" ] && continue

    # WAF未紐付きのALBはスキップ
    WEBACL_JSON=$(aws wafv2 get-web-acl-for-resource \
      --region "$REGION" \
      --resource-arn "$LB_ARN" \
      --output json 2>/dev/null || true)

    WEBACL_NAME=$(echo "$WEBACL_JSON" | jq -r '.WebACL.Name // ""')
    [ -z "$WEBACL_NAME" ] && continue

    echo "  WAF found: $LB_NAME ($WEBACL_NAME)" >&2

    TGS=$(aws elbv2 describe-target-groups \
      --region "$REGION" \
      --load-balancer-arn "$LB_ARN" \
      --query "TargetGroups[].[TargetGroupArn,TargetGroupName]" \
      --output text 2>/dev/null || true)

    [ -z "$TGS" ] && continue

    while read -r TG_ARN TG_NAME; do
      [ -z "${TG_ARN:-}" ] && continue

      ALL_ATTRS=$(aws elbv2 describe-target-group-attributes \
        --region "$REGION" \
        --target-group-arn "$TG_ARN" \
        --output json 2>/dev/null || echo '{"Attributes":[]}')

      HTTP2_WAF_ATTR=$(echo "$ALL_ATTRS" | jq -r '
        .Attributes[]
        | select(.Key | test("waf.*http2|http2.*waf"; "i"))
        | "\(.Key)=\(.Value)"
      ' 2>/dev/null || true)

      if [ -z "$HTTP2_WAF_ATTR" ]; then
        HTTP2_WAF_ATTR="NOT_FOUND"
        REVIEW_STATUS="ATTRIBUTE_NOT_FOUND"
      else
        REVIEW_STATUS="ATTRIBUTE_FOUND"
      fi

      echo "$REGION,$LB_NAME,$TG_NAME,$WEBACL_NAME,$HTTP2_WAF_ATTR,$REVIEW_STATUS" >> "$OUT"

    done <<< "$TGS"
  done <<< "$ALBS"
done

echo "" >&2
echo "=== 結果サマリー ===" >&2
grep "ATTRIBUTE_NOT_FOUND" "$OUT" | wc -l | xargs -I{} echo "関連属性未確認: {} 件" >&2
grep "ATTRIBUTE_FOUND" "$OUT" | wc -l | xargs -I{} echo "関連属性確認済み: {} 件" >&2
echo "" >&2
echo "Done: $OUT" >&2
cat "$OUT"

スクリプトでやっていること

処理の流れは以下です。

  1. 全リージョンを取得する
  2. 各リージョンの ALB を取得する
  3. ALB に WAF Web ACL が紐づいているか確認する
  4. WAF がない ALB はスキップする
  5. WAF付きALBに紐づくターゲットグループを取得する
  6. ターゲットグループ属性を取得する
  7. waf / http2 関連の属性を探す
  8. 結果を CSV に出力する

今回確認したいのは AWS WAF に関する内容なので、WAF が紐づいていない ALB は対象外にしています。

実行方法

スクリプトに実行権限を付与します。

chmod +x check_alb_waf_http2_v2.sh

スクリプトを実行します。

./check_alb_waf_http2_v2.sh

実行すると、以下の形式で CSV ファイルが作成されます。

alb_waf_http2_check_YYYYMMDD_HHMMSS.csv

CSVの確認方法

CSV を CLI 上で確認する場合は、以下のように実行します。

column -s, -t alb_waf_http2_check_*.csv | less -S

column で CSV を表形式に整形し、less -S で折り返さずに横スクロールできるようにしています。

出力結果をざっと確認する場合に便利です。

出力項目

項目 内容
Region リージョン
ALBName ALB名
TargetGroupName ターゲットグループ名
WAFName 紐づいている Web ACL 名
HTTP2_WAF_Attribute HTTP/2 / WAF 関連属性の確認結果
ReviewStatus 関連属性の確認状態

ReviewStatus の見方

ReviewStatus 意味
ATTRIBUTE_FOUND HTTP/2 / WAF 関連属性が確認できた
ATTRIBUTE_NOT_FOUND HTTP/2 / WAF 関連属性が確認できなかった

ATTRIBUTE_NOT_FOUND は、脆弱性の影響対象であることを示すものではありません。

このスクリプトでは、WAF付きALB配下のターゲットグループを確認対象にしているため、HTTP/2 を利用していないターゲットグループも含まれる可能性があります。

そのため、ATTRIBUTE_NOT_FOUND が出力された対象については、後続確認として ProtocolVersion を確認します。

追加確認

ATTRIBUTE_NOT_FOUND が出力された対象については、ターゲットグループの ProtocolVersion を確認します。

aws elbv2 describe-target-groups \
  --region <region> \
  --target-group-arns <target-group-arn> \
  --query "TargetGroups[].{Name:TargetGroupName,Protocol:Protocol,ProtocolVersion:ProtocolVersion}"

確認観点は以下です。

ProtocolVersion 確認観点
HTTP1 HTTP/2観点では優先度は低い
HTTP2 優先して確認する
GRPC HTTP/2ベースのため優先して確認する

ProtocolVersionHTTP2 または GRPC の場合は、対象ターゲットグループの属性を確認し、必要に応じて設定変更を検討します。

あとALB本体がWAFに紐づいていてrouting.http2.enabledがtrueだとhttp1でも要確認です。

コンソールで確認する場合

AWS コンソールで確認する場合は、対象ターゲットグループの属性を確認します。

確認対象は以下です。

  • Target Group
  • Attributes
  • WAF HTTP/2 traffic inspection behavior

設定値としては、以下のような項目があります。

設定 内容
Inspect immediately 利用可能なデータで即時に WAF 検査を開始する
Inspect after sufficient data 十分な HTTP/2 データフレームを受信してから WAF 検査を開始する

設定変更が必要な場合は、アプリケーションの通信特性も踏まえて判断します。

まとめ

CVE-2026-13763 の確認では、まず AWS WAF が紐づいている ALB を洗い出し、その配下のターゲットグループを確認しました。

スクリプトを利用することで、全リージョンの WAF付きALB と関連ターゲットグループを CSV に出力できます。

今回のスクリプトでは Judgement のような判定列は使わず、ReviewStatus として 関連属性が確認できたかどうか を出力する形にしました。

これにより、ATTRIBUTE_NOT_FOUND を即時の要対処と誤解せず、追加確認対象として扱いやすくなります。
シェルはVScodeでcopilot使いながら書いていたのですが、最初実行できず、、、うーーんとおもってたら改行コードで引っかかってました。
そんな時は以下のコマンドをどうぞ(シェル名は補完してくださいませ。)

sed -i 's/\r$//' check_alb_waf_http2.sh

最終的には、以下を確認したうえで対応要否を判断くださいませ~。

  • ターゲットグループの ProtocolVersion
  • WAF HTTP/2 traffic inspection behavior の設定
  • アプリケーションの通信特性

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?