On 8/3/11 5:03 AM, Philippe De Ryck wrote:
You can create pretty much any arbitrary message body you want using
application/x-www-form-urlencoded already by crafting smart names and
values so the real importance is in not being able to set Content-Type.
This is not a security problem as far as I can tell.

Using a form still results in the use of = and&  in the body, even with crafted 
names/values. Taking the ICS format as an example, this is very difficult to encode 
in a normal form, but very easy with cross-origin XHR. This can leave legacy 
servers open to a new attack vector.

        BEGIN:VCALENDAR
        VERSION:2.0
        PRODID:-//hacksw/handcal//NONSGML v1.0//EN
        BEGIN:VEVENT
        UID:[email protected]
        DTSTAMP:19970714T170000Z
        ORGANIZER;CN=John Doe:MAILTO:[email protected]
        DTSTART:19970714T170000Z
        DTEND:19970715T035959Z
        SUMMARY:Bastille Day Party
        END:VEVENT
        END:VCALENDAR

Trivial encoding of the above data in a normal form:

<!DOCTYPE html>
<form
 action="put_your_echo_script_here_to_see_what_the_POST_data_looks_like"
 method="POST"
 enctype="text/plain">
  <input type="hidden"
         name="BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:19970714T170000Z
ORGANIZER;CN"
         value="John Doe:MAILTO:[email protected]
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR
">
  <input type="submit" value="Send me some ICS!">
</form>

This can be done cross-site by browsers right this second. The submit can be fully scripted, so doesn't even need user interaction. Just loading a page with such a form can send your nice ICS data to any HTTP server that the UA is willing to reach.

-Boris

Reply via email to