速報

日本郵便UGXの送り状システムにサイバー攻撃 越境EC配送は全宛先で停止

CATEGORY

Redshift JDBCの任意コード実行を修正|接続設定と稼働中のJARを確認

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

Javaの接続設定からJDBCドライバーを経由してデータベースへ接続し、設定値がコード実行の入口にもなることを示す概念イラスト

この記事のポイント

脆弱性
CVE-2026-119084
深刻度

HIGH8.1

対象
Amazon Redshift JDBC Driver 2.3.0未満
悪用状況
不明
推奨対応
2.3.0以降に更新して再配備し、稼働中のドライバーを確認する。外部入力から接続設定を組み立てる経路を点検する。
公表日

目次

Amazon RedshiftへJavaから接続するアプリやジョブでは、実行環境のJDBCドライバーを確認してください。AWSセキュリティ告知 2026-168-AWSは2026年11月3日(米国太平洋標準時、日本時間4日)、2.3.0未満で接続URLやプロファイルの設定値をきっかけに、アプリのJVM内で任意コードが実行される可能性があると公表しました。-2026-119084です。修正版の2.3.0以降へ更新し、再配備後に実行中のプロセスが新しいドライバーをロードしていることを確かめます。

点検を急ぐのは、顧客や外部システムから接続設定を受け取る分析ツール、データ取り込みサービス、接続テスト機能です。固定設定の定期ジョブも更新対象ですが、攻撃者が設定へ到達できるかで優先度は変わります。Redshiftクラスターのエンジンを更新しても、接続するJava側のJARは置き換わりません。

スポンサーリンク

SQLを送る前の接続設定が入口になる

AWSのGitHubセキュリティ勧告によると、旧版は特定のJDBC接続URLパラメーターやAWS認証情報プロファイルのフィールドを処理する際、アプリのクラスパス上にあるクラスを読み込んでコードを実行することがあります。影響が出るのは接続先ではなく、ドライバーを呼び出すアプリ側のJVMです。任意のJavaコードが必ず実行できるという意味ではなく、攻撃者が対象の設定値に影響を与えられることや、利用できるクラスなどの条件が関係します。

通常の検索画面でSQLの検索語だけを入力できることは、接続設定を書き換えられることとは別です。プリペアドステートメントはSQLへ渡す値の扱いを変えますが、接続URLやプロファイルの値には作用しません。一方、利用者が接続先の文字列を登録できる管理画面や、外部から取り込んだ設定を使って接続を試すワーカーでは、SQLを一度も実行しなくても設定値がドライバーに届き得ます。接続テストに失敗した記録だけで、設定の処理も行われなかったとは判断できません。

AWSのGitHub勧告での評価は 3.1で8.1(High)です。評価上の権限要件と、個別アプリで接続設定を変更できる役割は分けて考えます。たとえば設定登録画面に認証が必要なアプリでも、登録できる役割が広い、別の設定が共有ワーカーで処理される、あるいは外部ファイルを自動で読み込むなら、JVMの実行権限との隔たりが大きくなります。今回確認したAWS資料には実環境での悪用を確認したとの記載はありません。

設定を受け取る場所から実行環境までたどる

まず、JDBC URLを受け取るフォーム、、設定ファイル、管理の参照先を洗い出します。接続先を登録する画面があるなら、ユーザーが指定できるのはホスト名だけか、クエリー文字列を含むURL全体かを確認します。画面上の項目を制限していても、裏側のAPIや一括インポートが任意の設定を受け付けていないかを別に調べます。テスト接続と本番の定期実行が違うサービスなら、両方の入力検証と実行環境が対象です。

次に、AWS認証情報プロファイルを利用している処理で、読み込む設定ファイルを誰が変更できるかを見ます。名前が固定されていても、実体が共有ボリュームやジョブの生成ファイルなら、元の設定を書き換えられる経路が残ることがあります。設定ファイルの書き込み権限と、その内容を取り込む経路は別々に確認します。のジョブ変数や管理画面で選んだ値からプロファイルが生成される場合は、生成後のファイルだけでなく入力元の変更権限も調べます。

運用台帳には、処理名、設定の入力元、編集できる役割、ドライバーを実行する環境、そこから使える権限を一行ずつ残します。たとえば、顧客が接続設定を保存し、共有ワーカーが検証する構成では、顧客画面の権限よりワーカーが持つ権限の方が影響の判断に役立ちます。反対に、運用チームだけが固定設定を変更できるバッチでは、変更の承認と設定の出所を確認しつつ、通常の更新手順で旧版を除去します。

スポンサーリンク

2.3.0以降へ更新し稼働中のJARを確かめる

修正はAWSのドライバー2.3.0リリースに含まれます。AWSは最新版への更新と、フォークや派生コードにも修正を反映することを推奨しています。GitHub勧告が示すMaven座標は com.amazon.redshift:redshift-jdbc42 です。直接依存に見当たらない場合も、親POMやの管理設定、コネクターが持ち込む間接依存、アプリに手動で追加したJARを確認します。複数の方式がある場合は、単位ではなく配備物単位で判断します。

Mavenでは該当モジュールで mvn dependency:tree -Dincludes=com.amazon.redshift:redshift-jdbc42 を使い、解決された依存を確認できます。GradleではJavaアプリの例として ./gradlew dependencyInsight --dependency redshift-jdbc42 --configuration runtimeClasspath で実行時の解決結果を確認します。構成名はプロジェクトに合わせてください。いずれもビルドが管理する依存の確認です。外から配置したJARや、別名の成果物へ同梱したドライバーは、この出力だけでは判定できません。

手動配置のある環境では、プラグインのディレクトリ、起動時に追加するライブラリ、コンテナへマウントする共有ファイルも確認します。ビルド時に作った一覧と、実際に配備したイメージやアーカイブの内容を比較してください。ファイル名の変更だけで中身が置き換わるわけではないので、配布元のバージョン情報や自社のビルド記録で確認します。新旧が混在する場合は、どちらが優先されるかを推測するより、不要な旧版を配備物と追加のクラスパスから除きます。

新しい成果物でアプリやワーカーを再起動し、接続を担当するプロセスがどの成果物から立ち上がったかを記録します。必要なら、隔離したでドライバークラスのコードソースや実装バージョンを確認します。形式によってはバージョンが得られないため、その場合はロード元のファイルと配備物の記録を照合します。接続URLや認証プロファイルの全文を出力する必要はありません。ログやチケットには秘密情報を含まない識別子を残します。

正常な接続と入力制限を別々に検証する

更新後は、検証用の接続先に対して、普段使っている認証方式で接続し、読み取り用の確認処理が通ることを確かめます。接続プールを使う構成では、以前の接続を再利用できただけで合格にせず、新しいプロセスから新規接続を試します。複数のワーカーや旧環境が残る段階的な切り替えでは、どの環境で試験したかを記録し、未更新の実行先へジョブが流れないことも見ます。

入力制限の試験では、許可したホストやデータベース名で通常どおり接続でき、未知のオプションや許可範囲外の値はドライバーへ渡る前に拒否されることを見ます。危険なクラス名や攻撃コードを本番へ入力する必要はありません。未定義の設定キー、同じキーの重複、区切り文字を含む値など、無害な試験データで拒否と記録を確認できます。画面の試験が通っても、設定のインポートやAPIに別の処理があれば同様に確認します。

接続できなくなった場合は、まず新旧のどのJARが読み込まれたか、認証方式に必要な設定が残っているか、ネットワークとデータベースの疎通があるかを切り分けます。例外の発生場所を記録し、接続に失敗したという事実だけで修正の影響と決め付けません。旧版への切り戻しが必要になれば、外部設定から接続を実行する機能を制限したうえで、修正版へ戻すまでの期限と責任者を決めます。

スポンサーリンク

すぐに更新できない場合は設定を作る側で絞る

AWSが案内する暫定策は、信頼できない値から接続URLやAWS認証情報プロファイルを組み立てないこと、外部入力が必要なら、許可するパラメーターと値を限定することです。アプリ側では、URLを丸ごと受け取る方式から、必要な項目だけを受け取り、固定したテンプレートへ安全に反映する方式へ寄せると検証箇所を絞れます。接続先を選ぶだけなら、登録済み接続先の識別子を受け取り、実際のURLはサーバー側に保持する方法もあります。

許可リストは、外部値がURL文字列へ結合された後の見た目だけで判断せず、構造を解析した結果に適用します。たとえばホスト名の入力に別のパラメーターを混ぜられないよう、区切りやエンコードを考慮して入力を検証し、必要な値だけを組み立て直します。運用者しか更新できないと考えているプロファイルでも、取り込み元が他チームや外部サービスなら書き込み経路を確認します。これは露出を抑える措置であり、旧版を使い続ける根拠にはしません。

不審な変更があればアプリ側の証跡を優先する

接続設定に想定外の値が見つかった場合、変更時刻、変更者、対象ジョブ、どのワーカーが設定を読み込んだかを照合します。設定の監査履歴、ジョブ実行記録、JVMの起動や例外のログ、外向き通信の記録があれば、同じ時刻軸に並べます。データベースのは補助情報になりますが、このはアプリ内でコードが動く可能性があるため、SQLが記録されていないだけでは調査を終えられません。

実行の疑いがあるときは、組織の初動手順に従って証跡を保全し、そのプロセスが参照できたファイル、接続先、サービス資格情報を基に影響を判断します。シークレットを交換する必要があるかは、更新の完了とは別の判断です。更新票を閉じる際は、修正版の配備、実際のロード元、通常接続の確認、外部設定の制限、疑わしい変更の有無をそれぞれ記録しておくと、後から再調査が必要になったときに範囲を絞れます。

出典・一次情報

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

この記事を書いた人

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などの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

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

ほかの脆弱性

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

脆弱性

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

詳しく見る

監査ログ

誰が、いつ、何をしたかを記録したログ。不正な操作の調査や、操作の正しさの確認に使う。

詳しく見る

パッケージ

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

詳しく見る

検証環境

本番環境に反映する前に、変更や更新が問題なく動くかを試すための環境。本番と同じ構成にできるほど確認の精度が上がる。

詳しく見る

リポジトリ

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

詳しく見る

ビルド

ソースコードなどから、実際に動かしたり配布したりできる形の成果物を作る作業。

詳しく見る

依存関係

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

詳しく見る

CI/CD

コードの変更をきっかけに、テストやビルド、本番への反映までを自動で行う開発の仕組み。

詳しく見る

デプロイ

作成・修正したプログラムやWebサイトを、本番のサーバーに配置して使える状態にすること。

詳しく見る

シークレット

パスワードやAPIキー、秘密鍵など、他人に知られてはいけない値。コードに書かず専用の仕組みで管理する。

詳しく見る

API

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

詳しく見る

テナント

クラウドやSaaSで、利用する組織ごとに分けられた区画。一つの仕組みを複数の組織で共有する形をマルチテナントと呼ぶ。

詳しく見る

CVSS

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

詳しく見る

認証

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

詳しく見る

データベース

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

詳しく見る

CVE

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

詳しく見る

認証情報

本人であることを証明するための情報。IDとパスワード、APIキー、アクセストークン、秘密鍵など。

詳しく見る

AWS

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

詳しく見る