速報

AWS SDK for pandasのIceberg書き込みにSQL注入|Glueの変更権限も点検

CATEGORY

AWS SDK for pandasのIceberg書き込みにSQL注入|Glueの変更権限も点検

※本ページのリンクにはプロモーションが含まれています。

共有カタログの列名を引用処理で検査しデータベースへの不正な経路を止める概念イラスト

この記事のポイント

脆弱性
CVE-2026-119301
深刻度

HIGH7.9

対象
AWS SDK for pandas(awswrangler)3.5.2以上3.17.1未満のApache Iceberg書き込み処理
悪用状況
不明
推奨対応
3.17.1以降へ更新し、Glueメタデータ変更者とジョブ実行ロールの権限差を点検。更新まで共有データベースのglue:UpdateTable等を制限し、過去の変更・実行記録を確認します。
公表日

目次

は2026年11月2日、AWS for pandas(名awswrangler)のApache Iceberg書き込み処理にの-2026-119301があると公表しました。影響するのは3.5.2以上3.17.1未満です。共有するAWS Glue Data Catalogのを書き換えられる利用者が、より強い権限で動く別の処理を介して、本来読めないテーブルを読み取り、更新対象テーブルへ書き込める可能性があります。

データ基盤の開発・運用担当者は、awswranglerを3.17.1以降へ更新するとともに、to_iceberg()を実行するロールと、対象テーブルのGlueメタデータを変更できる主体を比較してください。更新までの完全なはありません。AWSは権限差のある状態での呼び出しを避け、共有のglue:UpdateTableなどを制限するよう案内しています。

本稿はAWS公式告知2026-161-AWS、開発元、修正PR、公式CVEレコードを11月3日に確認したニュース解説です。修正版3.17.1は8月3日に公開済みであり、11月2日に初めてが配布されたわけではありません。以下の点検・試験は本サイトの提案で、攻撃再現や実測を行った結果ではありません。

スポンサーリンク

共有カタログの列名が権限の境界を越える

問題は、利用者の入力したSQL文字列だけにあるわけではありません。開発元のアドバイザリは、テーブル名や列名をAmazon Athena用SQLへ組み込む際、識別子を囲む文字を適切にしていなかったと説明しています。を照合する処理ではGlue Data Catalogから列名を読み戻すため、呼び出し元のDataFrameを検査しただけでは、その後に流入する名前まで確認したことになりません。

攻撃の前提は、攻撃者が被害側の処理するテーブルのカタログメタデータを変更できることです。認証不要で任意のAWSアカウントへ侵入できる問題でも、Athenaサービス全体のが失われる問題でもありません。一方、データ行を読む権限を持たない利用者でも、メタデータ変更権限と、より強い主体が後で実行する書き込み処理の組み合わせを点検する必要があります。

仮に、部門担当者が共有カタログの列定義を管理し、夜間の統合ジョブは複数部門のテーブルを読めるロールで動く構成を考えます。列名を単なる管理情報として信頼すると、その名前が統合ジョブの生成SQLへ入り、ジョブの権限で評価される経路ができます。これは影響条件を理解するための仮想例であり、特定組織の被害を示すものではありません。

深刻度と悪用状況は別々に読む

開発元が示す 3.1は7.9(High)で、ベクターはAV:N/AC:H/PR:L/UI:R/S:C/C:H/I:H/A:Lです。公式CVEレコードにはCVSS 4.0の5.0(Medium)も掲載されています。評価方式が違う値を同じ尺度として比較せず、本記事の表示用スコアはCVSS 3.1の7.9とします。

確認した提供元資料には、実環境での悪用や被害件数の説明はありません。悪用状況は不明として扱い、深刻度の高さを悪用確認へ読み替えません。優先順位は、影響版の利用、Iceberg書き込みの有無、共有メタデータの変更者、実行ロールが読める範囲から判断します。権限差がある本番ジョブを先に確認するのが実務的です。

スポンサーリンク

最初に実行環境と呼び出し経路を特定する

開発端末で最新版が入っていても、本番のバッチ、コンテナ、Lambdaレイヤー、ノートブックが同じ版とは限りません。依存定義とに加え、実際の処理を動かすPython環境で版を確認します。次の例はパッケージのメタデータを読むだけで、AWSへの接続やテーブルの変更は行いません。

python -c "from importlib.metadata import version; print(version('awswrangler'))"
rg -n 'to_iceberg|delete_from_iceberg_table|awswrangler' .

検索結果から、共通ラッパー、定期ジョブ、配布レイヤーの利用まで追います。対象ごとに、実行するAWSアカウントと、ロール、Glueデータベース・テーブル、依存版、成果物の識別子を対応付けます。ソース検索に一致しなかったことだけで、外部ライブラリーや別からの利用まで対象外と判断しないでください。

影響版を見つけたら3.17.1以降へ更新し、AWSが勧める最新安定版も互換性と合わせて検討します。依存ファイルの書き換えで終えず、コンテナやレイヤーを再作成し、本番へ反映してから稼働版を再取得します。独自フォークや派生コードでは版番号だけでなく、識別子の引用処理に修正が取り込まれていることを確認します。

修正はDDLとDMLで異なる引用文字を扱う

修正PR #3423は、fill_missing_columns_in_df=Trueによる既定の自動照合で、Glueの列名が生成するMERGE/INSERTへ入ることを説明しています。自分のDataFrameに変わった名前がないから安全、という判断はできません。この設定を切ることも、提供元が保証した完全な回避策として扱わないでください。

Athenaでは、CREATE TABLEやALTER TABLEなどのDDLと、SELECT・INSERT・MERGE・DELETEなどのDMLで識別子の引用方法が異なります。修正では、DML用に二重引用符、DDL用にバッククォートをそれぞれ処理するヘルパーを追加しています。文字列値を囲む単一引用符の処理を、列名の処理へそのまま流用する設計では足りません。

公開された修正差分では、テーブル・列名の生成箇所、MERGE/INSERT、上書き時のDELETE、列の追加・型変更などへ処理を適用しています。一方、partition_colsはday(ts)などの変換式を受け取るため、単純な識別子として一括引用していません。修正済みだからすべてのSQL関連引数へ任意の外部入力を渡してよい、と拡大解釈しないことが重要です。

スポンサーリンク

更新前はメタデータ変更者と実行ロールを比較する

AWSの暫定策は、影響するto_iceberg()を、メタデータ変更者より強い権限の主体で呼ばないことと、共有データベースの変更権限を制限することです。本サイトでは、カタログ変更、ジョブ実行、データ参照の三つを別欄で棚卸しする方法を提案します。のロール名が違うだけでは、実効権限が分離された証拠になりません。

確認対象には、人の操作だけでなく、カタログを更新する自動化や委任されたロールも含めます。必要なスキーマ変更を全面禁止して業務を止める前に、変更対象を限定し、承認された経路へ集約できるかを検討します。ただし、権限を絞ったという説明だけで修正適用を不要にせず、暫定対応と更新の完了を別々に管理してください。

更新後は引用文字と権限差を無害なデータで試す

受け入れ試験は自社管理の隔離環境で行い、通常の列名に加えて、引用文字を含む列名が意図した一つの識別子として処理されるかを確認します。提供元の修正テストを参考に、DataFrameから来る列名とGlueから読み戻す列名を分けて検証します。本番テーブルへ攻撃用の名前を入れたり、実データで漏えいの可否を試したりする必要はありません。

追記、、上書き、列追加など、実際に使うモードも確認します。正常なジョブが通ることと、不正な構造がSQLとして解釈されないことは別の合格条件です。名前の引用変更で構文エラーが出た場合は、生成SQL、DDL/DMLの種類、列名の出所を調べます。エラーを消すためにロールへ広い権限を足したり、修正前の独自連結へ戻したりしないでください。

過去の変更とジョブ実行を時系列で照合する

更新は、過去のカタログ変更や既に書き込まれたデータを元へ戻す処理ではありません。共有メタデータを変更できる主体が多かった場合は、残っている変更履歴とAthenaのクエリ実行記録、ジョブの配信・実行履歴を保全し、カタログ変更の後にどの権限で処理されたかを確認します。単に特殊文字があるという理由だけで侵害と判定せず、正当なスキーマ変更の記録と突き合わせます。

AWS GlueのCloudTrail公式文書によると、CloudTrailはGlue の呼び出しを記録し、実行主体、時刻、要求、送信元などを追跡できます。ただし、すべての情報がログに残るわけではなく、GetTableなど一部APIの応答は記録されません。ログに列定義が見えないことを、変更も悪用もなかった証明にはできません。保存期間と取得できた範囲を明示して調査します。

対応の完了条件は、稼働版の更新、カタログ変更権限の確認、通常処理の回帰試験、過去の不審変更の評価です。既存のAWS SDK for pandasの結果保存先に関する記事で扱ったCVE-2026-118029はS3バケットの所有者検証が主題で、今回は共有メタデータから生成SQLへ入る名前と権限差が主題です。両方を使う環境では、それぞれの確認項目を残してください。

対応票は版と権限とデータを別々に残す

確認対象残す記録完了の判断
実行環境awswranglerの稼働版と成果物修正を含む版が本番で動く
共有カタログ変更できる主体と対象テーブル不要な変更経路を閉じた
ジョブ権限参照先と書き込み先の範囲業務上必要な範囲へ限定した
回帰試験列名・モード別の試験結果通常処理と引用文字の扱いを確認した
過去の実行保存済みログと未取得期間不審な変更を評価し残課題を引き継いだ

更新作業と調査作業の担当が違う場合も、この対応票を共有すると「パッチ適用済み」という一言で未確認項目が消えるのを防げます。用のイメージやレイヤーにも修正済みを用意し、障害時に影響版へ戻らない計画を持ってください。

出典・一次情報

本記事は以下の公開情報をもとに作成しています。最新の状況は各リンク先で確認してください。

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

あわせて確認したい対策・解説

ほかの脆弱性

※悪用の「未確認」は、最終確認時点で悪用の報告が見つかっていないことを示します。悪用されていないことを保証するものではありません。「不明」は公表情報に悪用状況の記載がないものです。

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

依存関係

プログラムが動くために必要な、ほかのライブラリやパッケージとの関係。また、その必要な部品そのもの。

詳しく見る

ロールバック

更新や変更で問題が起きたときに、システムやデータを変更前の状態に戻すこと。

詳しく見る

API

ソフトウェアやサービスの機能を、ほかのプログラムから決まった方法で呼び出して使えるようにした窓口。

詳しく見る

マージ

Gitなどで、あるブランチの変更を別のブランチに取り込んで一つにまとめること。

詳しく見る

IAM

ID・アクセス管理。誰が、どの資源に、どんな操作ができるかを管理する仕組み。AWSなどクラウドの権限管理を指すことも多い。

詳しく見る

リポジトリ

ソースコードなどのファイルと、その変更の履歴をまとめて保管する場所。Gitで管理し、GitHubなどで共有する。

詳しく見る

リージョン

クラウドのデータセンターが置かれている地域の単位。東京・大阪など、どこでサービスを動かしデータを保存するかを選ぶ。

詳しく見る

ロックファイル

パッケージマネージャーが、実際に入れた依存パッケージのバージョンを記録するファイル。package-lock.jsonなど。

詳しく見る

CVSS

脆弱性の深刻度を0.0〜10.0の数値で評価する共通の基準。数値が大きいほど深刻度が高い。

詳しく見る

認証

アクセスしてきた相手が本人であることを確かめる仕組み。パスワードや生体情報、電子証明書などを使う。

詳しく見る

スキーマ

データの構造や型、決まりごとを定義したもの。データベースのテーブルの設計や、JSONの形式の定義などに使う。

詳しく見る

エスケープ

特別な意味を持つ記号を、ただの文字として扱われる形に変換すること。XSSやSQLインジェクションを防ぐ基本の対策。

詳しく見る

パッチ

ソフトウェアの不具合や脆弱性を修正するための更新プログラム。適用することで既知の問題を解消する。

詳しく見る

アドバイザリ

開発元や公的機関が公表する、脆弱性の内容・影響を受けるバージョン・対処方法などをまとめた情報。

詳しく見る

データベース

データを決まった形式で整理して保存し、検索や更新をしやすくした仕組み。WordPressではMySQLやMariaDBを使う。

詳しく見る

回避策

修正版をすぐに適用できない場合に、脆弱性を悪用される条件をなくすための一時的な対処。機能の無効化や設定の変更など。

詳しく見る

メタデータ

データそのものではなく、そのデータについての情報。作成日時・作成者・形式・サイズなど。

詳しく見る

CVE

公開された脆弱性に付けられる世界共通の識別番号。「CVE-2026-12345」のように年と連番で表す。

詳しく見る

脆弱性

ソフトウェアや設定の不備のうち、攻撃者に悪用されると情報漏えいや不正操作などにつながる弱点。

詳しく見る

SQLインジェクション

入力値にSQLの一部を紛れ込ませ、データベースへの命令を不正に書き換える攻撃。情報の漏えいや改ざんにつながる。

詳しく見る

パッケージ

ソフトウェアを配布・インストールしやすいように、プログラムと必要な情報をひとまとめにしたもの。npmやComposerなどで管理する。

詳しく見る

Python

読みやすい文法が特徴のプログラミング言語。AI・データ分析・Webアプリ・自動化のスクリプトなどで広く使われる。

詳しく見る

SDK

ソフトウェア開発キット。特定のサービスや環境向けの開発に必要なライブラリやツール、ドキュメントをまとめたもの。

詳しく見る

AWS

Amazonが提供するクラウドサービス(Amazon Web Services)。仮想サーバーやストレージ、データベースなど多くのサービスがある。

詳しく見る