CVE-2026-13763対応でAWS WAF付きALBのHTTP/2関連設定をCLIで洗い出した話
はじめに
やおよろ~!!!最近、今更過ぎる「超かぐや姫!」にハマっている滝田です。
啓蒙活動として最近出てた脆弱性の対象リストアップが面倒くさかったので記事にしておきます。
本題ですがAWS WAF の HTTP/2 リクエストボディ検査に関するSecurity Bulletinが公開されていたため(たまたまXで言ってる人がいて知った)、影響確認の一環としてAWS CLIで対象リソースを洗い出しました。
対象の CVE は以下です。
- CVE-2026-13762
https://www.cve.org/cverecord?id=CVE-2026-13762 - CVE-2026-13763
https://www.cve.org/cverecord?id=CVE-2026-13763
本記事では、このうち 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"
スクリプトでやっていること
処理の流れは以下です。
- 全リージョンを取得する
- 各リージョンの ALB を取得する
- ALB に WAF Web ACL が紐づいているか確認する
- WAF がない ALB はスキップする
- WAF付きALBに紐づくターゲットグループを取得する
- ターゲットグループ属性を取得する
-
waf/http2関連の属性を探す - 結果を 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ベースのため優先して確認する |
ProtocolVersion が HTTP2 または 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 の設定
- アプリケーションの通信特性
参考
- AWS WAF Developer Guide: Considerations for managing body inspection in AWS WAF
https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-setting-body-inspection-limit.html