---
title: "SAPセキュリティパッチデー2026年10月：Cloud SDK for PythonのCVE-2026-89111と更新手順"
url: "https://www.issoh.co.jp/tech/details/18805/"
published: 2026-10-23
updated: 2026-10-23
categories: ["セキュリティ"]
publisher: "株式会社一創"
---

# SAPセキュリティパッチデー2026年10月：Cloud SDK for PythonのCVE-2026-89111と更新手順

SAPは2026年10月13日のセキュリティパッチデーで、新規のセキュリティノート16件とGitHubのセキュリティ勧告4件を公表しました。最も重いのはSAP Cloud SDK for PythonのOAuth2のSSRF（CVE-2026-89111）で、CVSSは上限の10.0です。この記事では、BTPでPythonアプリを作る開発者向けに影響版を判定するスクリプトと更新手順、更新までの許可リスト検証を示し、NetWeaver・S/4HANA・MIIの重大3件の扱いもあわせて整理します。内容は2026年10月23日時点の公開情報にもとづきます。

## まとめ：Cloud SDKは0.58.3以上へ、重大3件はノートを優先適用

SAP Cloud SDK for Pythonを使っているアプリは、SAPが修正版とする0.45.2ではなく0.58.3以上へ上げてください。0.45.2のあとも、同じtenant\_subdomainまわりの検証漏れが2回直されているからです。pip-auditやDependabotは10月23日時点で本件を検出しないため、版は自分で確かめる必要があります。

ABAP側では、Visual Composer（CVE-2026-89110）、S/4HANA（CVE-2026-89107）、MII（CVE-2026-89108）の3件がCriticalです。該当コンポーネントを持つシステムから順にノートを当てます。どのシステムが対象か切り分けられない場合は、[SAPコンサルティング・導入支援サービス](https://www.issoh.co.jp/service/erp%5Fcrm/sap/)で構成の棚卸しから相談できます。

## 2026年10月のSAPパッチデーで公表された22件の内訳と重大4件

まず公表ページに載っている事実を並べ、どこから手を付けるかの材料にします。

### 新規16件・GitHub勧告4件・更新2件のうちCVSS 9以上の4件

[SAP Security Patch Day（2026年10月）](https://support.sap.com/en/my-support/knowledge-base/security-notes-news/october-2026.html)には、新規16件、GitHubのセキュリティ勧告4件、過去に出したノートの更新2件が並んでいます。CVSS 9以上は次の4件です。

| CVE            | 製品・機能                     | 種別          | 対象版              | CVSS |
| -------------- | ------------------------- | ----------- | ---------------- | ---- |
| CVE-2026-89111 | SAP Cloud SDK for Python  | OAuth2のSSRF | 0.45.2未満         | 10.0 |
| CVE-2026-89110 | NetWeaver Visual Composer | アクセス制御の不備   | VC70RUNTIME 7.50 | 9.9  |
| CVE-2026-89107 | S/4HANA（代替・検証ルール管理）       | コードインジェクション | S4CORE 105〜109   | 9.9  |
| CVE-2026-89108 | MII（構成サービス）               | 認可チェック漏れ    | XMII 15.4・15.5   | 9.1  |

MIIの表中の構成サービスはConfiguration Serviceです。HighにはCommerce CloudのSQLインジェクション（CVE-2026-89113・8.8）と、NetWeaverとWeb DispatcherのICMのメモリ破損（CVE-2026-58249・7.5）があります。CVSSとCWEの読み方は[CVEとCWEの違いと脆弱性管理の基礎](https://www.issoh.co.jp/tech/details/5119/)で整理しています。

### CVE-2026-89111によるOAuth2資格情報の漏出条件と仕組み

SAP Cloud SDK for Pythonは、BTP上のPythonアプリから宛先サービスや監査ログなどを呼ぶための公式SDKです。[GHSA-4mv3-jxxm-9cx2](https://github.com/SAP/cloud-sdk-python/security/advisories/GHSA-4mv3-jxxm-9cx2)によれば、マルチテナントのアプリでtenant\_subdomainを攻撃者が決められると、OAuth2のトークン要求が攻撃者のサーバーへ向かいます。

SDKはトークンURLの先頭ラベルをテナントのサブドメインに差し替えて要求を送ります。差し替える値に「.」や「/」が入ると、ホスト名ごと別のサーバーを指せてしまう。その要求にはクライアントIDとシークレットが乗るため、受け取った側はアプリの資格情報を手に入れます。分類はCWE-918（[SSRF](https://www.issoh.co.jp/tech/details/16362/)）で、CVSSは10.0です。資格情報の流れは[OAuth 2.0のクライアントクレデンシャル](https://www.issoh.co.jp/tech/details/8369/)と同じなので、漏れた時点で第三者がアプリになりすませます。

## Cloud SDK for Pythonの影響版判定スクリプトとpip-auditの盲点

判定に要るのは、動いている環境に入っているsap-cloud-sdkの版だけです。

### importlib.metadataによる導入版の0.45.2と0.58.3での分類

コンテナや仮想環境の中で次を実行します。標準ライブラリだけで動き、Python 3.11以上（[PyPIのsap-cloud-sdk](https://pypi.org/project/sap-cloud-sdk/)の要件）で使えます。

```
import importlib.metadata as md
import re

FIXED = (0, 58, 3)  # tenant_subdomain 周りの追加修正をすべて含む版


def as_tuple(ver):
    return tuple(int(re.match(r"\d+", x).group()) for x in ver.split(".")[:3])


def judge(ver):
    t = as_tuple(ver)
    if t < (0, 45, 2):
        return f"{ver}: CVE-2026-89111 の影響版。すぐ更新"
    if t < FIXED:
        return f"{ver}: 0.45.2 以上だが追加修正が未適用。0.58.3 以上へ"
    return f"{ver}: 0.58.3 以上"


try:
    print(judge(md.version("sap-cloud-sdk")))
except md.PackageNotFoundError:
    print("sap-cloud-sdk は入っていません")
```

2026年10月23日に0.44.0・0.45.2・0.55.0・0.58.3・0.62.0の5つを流し、それぞれ「影響版」「追加修正が未適用」「追加修正が未適用」「0.58.3以上」「0.58.3以上」と分かれることを確かめました。ビルド済みイメージを複数持つ場合は、各イメージでこのファイルを実行すれば一覧が取れます。

### pip-auditとDependabotが10月23日時点で本件を検出しない理由

CIで[pip-audit](https://pypi.org/project/pip-audit/)を回していても、本件は警告に出ません。pip-auditが既定で照合するPyPIの脆弱性情報を10月23日にJSON APIで引いたところ、影響版の0.45.1でも登録は空でした。

勧告はSAPのリポジトリ内で公開されたもので、GitHub Advisory Database側の同じIDのページは404を返します。Dependabotもこのデータベースを見るため、アラートは上がりません。[CVEのレコード](https://www.cve.org/CVERecord?id=CVE-2026-89111)はあるものの、PyPIの版範囲とは結び付いていない状態です。「スキャナが0件だから安全」とは言えないので、上の判定を正にしてください。

## 0.45.2では足りない理由と0.58.3以上へ上げる更新手順・回帰確認

SAPの表は「0.45.2未満」を影響版としていますが、リリース履歴を読むと修正は3回に分かれています。

### tenant\_subdomain検証の3段階の修正履歴と更新版の判断

| 版      | 公開日        | 直した箇所                 |
| ------ | ---------- | --------------------- |
| 0.45.2 | 2026年8月21日 | 3つのクラスでの入力値検証         |
| 0.55.1 | 2026年9月18日 | トークン取得メソッドでの入力値検証     |
| 0.58.3 | 2026年10月9日 | トークンURLの置換範囲を先頭ラベルに限定 |

表の3つのクラスはAgentGatewayClient、destination.TokenProvider、dms.Authで、0.55.1のトークン取得メソッドはXsuaaAuthProvider.\_fetch\_tokenを指します。[v0.45.2](https://github.com/SAP/cloud-sdk-python/releases/tag/v0.45.2)で、値をRFC 1123のDNSラベル（英数字とハイフン・63字以内）として検証するようになりました。ところが[v0.55.1](https://github.com/SAP/cloud-sdk-python/releases/tag/v0.55.1)のリリースノートは、XsuaaAuthProviderに同じ検証が無く「evil.example/oauth/token?ignore=」のような値で資格情報が外へ向かう状態だったと書いています。

[v0.58.3](https://github.com/SAP/cloud-sdk-python/releases/tag/v0.58.3)では、識別ゾーン名を文字列置換で差し替えていたために、URLのパスに同じ文字列があると壊れたURLになる問題を直しました。勧告の表だけ見て0.45.2で止めた環境は、後の2件が残ります。なお0.45.2のPyPI公開は勧告の53日前で、修正版の存在を知らずに古い版を固定していた環境が多いと見ておくべきです。

### pip install -Uとrequirementsでの0.58.3以上への更新・固定

開発環境で上げ、テストを通したロックファイルを本番へ持ち込む順にします。10月23日時点のPyPIの最新は0.62.0です。4の check\_sap\_sdk.py は、前の章の判定スクリプトを保存したファイルです。

```
# 1. 現在の版
pip show sap-cloud-sdk

# 2. 0.58.3 以上へ更新（シェルの解釈を避けるため引用符で囲む）
pip install -U "sap-cloud-sdk>=0.58.3"

# 3. requirements.txt の下限を書き換えて固定し直す
#    sap-cloud-sdk>=0.58.3
pip freeze | grep -i sap-cloud-sdk

# 4. 判定スクリプトで確認
python check_sap_sdk.py
```

Cloud Foundryへ載せている場合は、requirements.txtを直したうえでcf pushし直すまで、動いているインスタンスは古い版のままです。0.45.2以降は不正な値でValueErrorが出るようになったため、テナントのサブドメインに想定外の文字が混ざるテストデータを使っていると、更新後に失敗します。その失敗は直すべき入力を見つけた結果なので、テストの期待値を変えて黙らせないでください。

## 更新できない間の暫定策：tenant\_subdomainを許可リストで検証する実装

勧告は更新までの緩和策として、SDKへ渡す前にtenant\_subdomainを登録済みテナントの許可リストと照合する方法を挙げています。

### 登録済みテナントだけを通すPythonの関数と不正値4件のテスト

形式の検証だけでは足りません。形式が正しい未登録のサブドメインも、攻撃者が用意できるからです。そこでSDKと同じ正規表現に加え、サブスクリプション時に保存した値との一致を求めます。

```
import re

# 登録済みテナントのサブドメイン（サブスクリプション時に保存した値）
ALLOWED_TENANTS = frozenset({"customer-a", "customer-b"})
_LABEL = re.compile(r"^[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?$")


def checked_subdomain(value: str) -> str:
    if not _LABEL.fullmatch(value) or value not in ALLOWED_TENANTS:
        raise ValueError(f"unregistered tenant_subdomain: {value!r}")
    return value


assert checked_subdomain("customer-a") == "customer-a"
for bad in ["evil.example/oauth/token?ignore=", "customer-a.evil.example",
            "customer-c", "-customer-a"]:
    try:
        checked_subdomain(bad)
    except ValueError:
        pass
    else:
        raise AssertionError(bad)
```

SDKの呼び出しのうちtenant\_subdomainを渡す箇所をすべて洗い出し、この関数を通した値だけを渡します。手元で実行し、正しい1件が通り、URL区切りを含む値・別ドメインを後ろに付けた値・未登録の値・先頭ハイフンの4件がすべて弾かれることを確かめました。

### テナント値をリクエストのホスト名から切り出す実装が危ない理由

攻撃者が値を決められるかどうかは、アプリがどこからtenant\_subdomainを得ているかで決まります。受け付けたリクエストのホスト名やヘッダから先頭ラベルを切り出して渡している実装は、外から値を差し込める入口になります。認証済みのトークンから取り出した値を使っている実装より、こちらを先に直してください。

許可リストはあくまで更新までのつなぎです。0.55.1と0.58.3の問題はSDK内部のURL組み立てにも原因があったため、入口の検証だけで全部を防げる保証はありません。資格情報が漏れた疑いがあるなら、XSUAAのサービスキーやバインディングを作り直して古いシークレットを無効にします。

## NetWeaver・S/4HANA・MIIの重大3件をノートで適用する判断と段取り

残る3件のCriticalは、ABAPやJavaのシステム側にSAPノートを当てて直します。ノート本文はSAP for Meのログインが必要なので、適用の詳細はノートで確かめてください。

### Visual Composer・S/4HANA・MIIの対象コンポーネントを先に照合する

最初の作業は、自社のシステムが表の対象版を持っているかの照合です。Visual ComposerはVC70RUNTIME 7.50、S/4HANAはS4CORE 105〜109、MIIはXMII 15.4・15.5が対象です。S4COREの版は、S/4HANAのシステムステータスにあるコンポーネント情報で確かめられます。5つの版にまたがるため、オンプレミスやプライベートクラウドで動かしているS/4HANAは対象と見て照合を始めます。

CVE-2026-89107はパッチデーのあとに更新ノートとしても掲載されており、前に当てた内容から変わっている可能性があります。10月13日の直後に適用を済ませた環境も、ノートの版を見直してください。S/4HANAの製品の位置付けは[SAP S/4HANAとは：ECCとの違いと導入形態](https://www.issoh.co.jp/column/details/13603/)で解説しています。

### SNOTEでの取り込みとアドオンへの影響を確かめる移送の順番

ABAPのシステムでは、トランザクションSNOTEでノートを取り込み、開発機から検証機、本番機の順に移送します。代替・検証ルールを業務で使っているS/4HANAは、ルールを呼ぶアドオンの動作を検証機で確かめてから本番へ移します。

アドオンが多いシステムほど、この確認に必要な時間も長くなる傾向です。ABAPで書かれた独自機能の影響範囲の見方は[ABAPとは：業務開発言語の特徴と2027年問題への備え](https://www.issoh.co.jp/tech/details/15397/)が参考になります。Visual Composerを業務で使っていないなら、ノート適用までの間、サービスを停止して入口を閉じる判断も取れます。

## 対応の優先順位：BTPのマルチテナントアプリを当日に直す判断基準

複数の対象を抱えている場合の順番を、条件ごとに言い切ります。

### 外部からテナント値が届くBTPアプリは更新か許可リストを当日中に

最優先は、マルチテナントで公開しているBTPのPythonアプリのうち0.58.3未満のものです。CVSS 10.0で認証も要らず、漏れるのはアプリ自身の資格情報です。当日中に0.58.3以上へ上げ、間に合わなければ許可リストを入れます。

シングルテナントのアプリや社内だけのバッチは、tenant\_subdomainを外から受け取らないなら週内の更新でよいと判断します。ただし版の固定を放置する理由にはなりません。次にマルチテナントへ広げたとき、そのまま穴になります。

### 重大3件はインターネット側の露出で順番を決め月内に適用を終える

ABAP側の3件は、インターネットから届くかどうかで順番を付けます。Visual ComposerやMIIを外部に開いているシステムが先で、社内ネットワークだけで使うS/4HANAが後です。それでも月内に適用を終えます。

逆に、Mediumの13件まで同じ保守時間で一度に当てようとして、重大3件の適用が来月にずれ込むのは避けてください。件数を揃えるより、Criticalを先に終わらせる方が穴の開いている期間は短くなります。

## SAPセキュリティパッチデー2026年10月でよくある質問と回答

10月のパッチデーの対応で出てきやすい疑問に、公開されている一次情報の範囲で答えます。

### SAPセキュリティパッチデーはいつ公開される決まりですか？

SAPは毎月第2火曜日をパッチデーとしてセキュリティノートを公開しており、2026年10月は13日でした。社内の対応期限は、この公開日を起点に数えると部署間で揃います。公開後に内容が更新されるノートもあり、10月分でも2件が更新扱いで載っています。次回は11月10日の見込みです。

### Java版のSAP Cloud SDKも今回の脆弱性の対象ですか？

CVE-2026-89111の対象はPython版（PyPIのsap-cloud-sdk）だけで、勧告にJava版やJavaScript版の記載はありません。ただし10月の一覧には、別のSAPのオープンソースとしてcloud-security-services-integration-library（CVE-2026-89105）の認証不備も載っています。BTP向けの部品を複数使っている場合は、一覧の全行と自社の依存関係を突き合わせます。

### 0.45.2へ上げたあとValueErrorが出るようになったのはなぜですか？

0.45.2から、tenant\_subdomainがDNSラベルの形式に合わない値をValueErrorで止めるようになったためです。以前は不正な値でも黙ってURLを組み立てていました。エラーが出たら、どこからその値が来ているかを追ってください。ドットや下線を含むテナント名が入っているなら、それは今回の検証が防ぎたかった入力そのものです。

### 悪用は確認されていますか？公表を待たずに対応すべきですか？

SAPの公表ページとGHSAに、悪用を確認したとの記載はありません。一方で修正版0.45.2は勧告の53日前からPyPIに出ており、差分は公開リポジトリで誰でも読めます。攻撃の手順はリリースノートからほぼ読み取れるので、悪用の報告を待つ理由はありません。

### SAPノートの本文を読めないときは何を見れば判断できますか？

SAP for Meのアカウントが無い場合でも、公表ページの対象コンポーネントと版は誰でも読めます。自社のシステムにその版があるかを確認する場所は、ABAPならシステムステータスのコンポーネント情報です。そのうえでノートの取得と適用は、保守契約を持つ部署かパートナーに依頼します。

## 関連記事

- [SAPの2027年問題とは？ERP保守終了の影響とS/4HANA移行・延命の判断を解説](https://www.issoh.co.jp/column/details/13381/)：保守が切れる系列はノートの提供も止まります。
- [SAP Jouleとは？使用LLMモデルとJoule Agents・料金・導入を2026年最新で解説](https://www.issoh.co.jp/tech/details/11222/)：BTP上のAIエージェント開発の全体像です。
- [脆弱性とは？種類・CVE/CVSSの仕組みと発見から修正までの実務を解説](https://www.issoh.co.jp/tech/details/13546/)：公表から修正までの流れの基礎です。
- [CVE（共通脆弱性識別子）とは？仕組み・CVSS/CWE/NVDとの違いと2026年の運営体制変化](https://www.issoh.co.jp/tech/details/5092/)：CVEレコードと各データベースの関係を整理しています。
- [脆弱性診断とは？種類・費用相場・進め方と外注時の判断基準を解説](https://www.issoh.co.jp/column/details/13101/)：自社システムの穴をまとめて洗い出す方法です。

---

出典: [SAPセキュリティパッチデー2026年10月：Cloud SDK for PythonのCVE-2026-89111と更新手順](<https://www.issoh.co.jp/tech/details/18805/>)（株式会社一創）
