3.2 Eventum
Исто и за оваа апликација истите чекори како за претходната апликација во која најдов Stored (Persistent) складирана Cross-Site Scripting ранливост. Тоа значи дека кога и да се вратите на апликацијата, скриптата ќе се извршува кога ќе ја повикате ранливата страна.
POST Stored/Persistent XSS:
– Ранлива скрипта: list.php, ранлив параметар: keywords
POST /eventum-2.3/htdocs/list.php?keywords=<script>alert('ZSL')<%2Fscript> HTTP/1.1
RESPONSE: HTTP/1.1 200 OK
Откако се најавив (post-auth) и после извршувањето на побарувањето, малициозниот стринг е вметнат и складиран додека рачно не се избрише. Исто така, самата апликација, складираниот стринг го извршува на секои 5 минути се додека не ја затворите страницата (page self-refresh/session). Тест со помош на оставање на стрингот:
<script>alert(Date())</script> во search полето…
Reflected/Non-Persistent XSS:
forgot_password.php и select_project.php се исто така ранливи на XSS нападот поради немање филтрирање кога ја користат REQUEST_URI променливата. Ја тестирав и верзијата 2.2:
GET /eventum-2.3/htdocs/forgot_password.php/>"><script>alert('ZSL')</script>
GET /eventum-2.2/forgot_password.php/>"><script>alert('ZSL')</script>
GET /eventum-2.2/select_project.php/>"><script>alert('ZSL')</script>
———————————————–
Скрипта: eventum-2.3/lib/eventum/class.auth.php:
Line 90: $failed_url .= "&url=" . urlencode($_SERVER['REQUEST_URI']);
Line 131: self::redirect("select_project.php?url=" . urlencode($_SERVER['REQUEST_URI']), $is_popup);
—
Скрипта: eventum-2.3/templates/current_filters.tpl.html
Line: 11: <b>{$filter_name}</b>: {$filter_value}{if !$smarty.foreach.active_filters.last}; {/if}
—
Скрипта: eventum-2.3libpearHTTP.php:
Line 318: $url = isset($_SERVER['REQUEST_URI']) ?
Line 319: $_SERVER['REQUEST_URI'] : $_
———————————————–
Ранливоста се наоѓа во папката templates во следниве фајлови:
– current_filters.tpl.html
– forgot_password.tpl.html
– select_project.tpl.html
(+ е додаден код или закрпен, – е одстранет код):
—————————————————————————
=== modified file 'templates/current_filters.tpl.html'
--- templates/current_filters.tpl.html 2008-07-22 20:19:52 +0000
+++ templates/current_filters.tpl.html 2011-01-24 03:14:02 +0000
@@ -8,7 +8,7 @@
<td class="default">
{t}Current filters:{/t}
{foreach from=$active_filters name=active_filters key=filter_name item=filter_value}
- <b>{$filter_name}</b>: {$filter_value}{if !$smarty.foreach.active_filters.last};{/if}
+ <b>{$filter_name}</b>: {$filter_value|escape:"html"}{if !$smarty.foreach.active_filters.last}; {/if}
{foreachelse}
<i>{t}None{/t}</i>
{/foreach}
=== modified file 'templates/forgot_password.tpl.html'
--- templates/forgot_password.tpl.html 2010-10-07 11:43:46 +0000
+++ templates/forgot_password.tpl.html 2011-01-24 03:14:02 +0000
@@ -23,7 +23,7 @@
{include file="yellow_note.tpl.html" content=$note_message}
{/if}
<br />
-<form onSubmit="return validateForm(this);" method="post" action="{$smarty.server.PHP_SELF}">
+<form name="email_form" method="post" action="">
<input value="reset_password">
<table align="center" width="500" border="0" cellspacing="0" cellpadding="1" bgcolor="#000000">
<tr>
=== modified file 'templates/select_project.tpl.html'
--- templates/select_project.tpl.html 2010-10-07 11:43:46 +0000
+++ templates/select_project.tpl.html 2011-01-24 03:14:02 +0000
@@ -16,7 +16,7 @@
//-->
</script>
{/literal}
-<form onSubmit="return validateForm(this);" method="post" action="{$smarty.server.PHP_SELF}">
+<form onSubmit="return validateForm(this);" method="post" action="">
<input name="cat" value="select">
<input name="url" value="{$smarty.get.url}">
<table align="center" width="400" border="0" cellspacing="0" cellpadding="1" bgcolor="#000000">
—————————————————————————
Следење на измените од Eventum тимот (пред официјално објавување на нова верзија):
https://code.launchpad.net/~eventum-developers/eventum/trunk
4. Безбедносни предупредувања, пријавување, одговорност
После секој пронајдок, индивидуално зависи дали ќе го пријавите тој пронајдок на производителот со надеж за соработка и координирано објавување на безбедносно предупредување (етички) или пак веднаш со објавување (не-етички) или пак воопшто (за приватни цели).
Иако се обидував да воспоставам комуникација со тимот на CultBooking, не добив одговор, поради што, за неколку дена ги објавив и безбедносните предупредувања за пошироката јавност (според нашата полиса за обелоденување). Дури по 2 недели од објавувањето, бев известен од господинот Uwe Steinbach од Cultuzz тимот дека објавиле закрпена верзија 2.0.5.
Тимот на CultBooking во овој случај одиграа многу не одговорно па може да се каже и малку дрско.
За поздрав е тимот на Eventum поради својата инволвираност и активност, и поради реагирање веднаш на пријавените ранливости и грижа за безбедноста на својата апликација. Добија целосна соработка и поддршка и разумно време за креирање на закрпата. Безбедноста на информации треба да се сфати сериозно. Откако ги пријавив ранливостите, господинот Bryan Alsdorf и Elan Ruusamäe развија закрпа за помалку од два дена, после кое следеше официјално објавување на новата верзија, 2.3.1.
Безб. предупредување ID: ZSL-2011-4987
Наслов: CultBooking 2.0.4 (cultbooking.php) Multiple XSS/PD Vulnerabilities
Врска: http://www.zeroscience.mk/mk/vulnerabilities/ZSL-2011-4987.php
Безб. предупредување ID: ZSL-2011-4988
Наслов: CultBooking 2.0.4 (lang) Local File Inclusion Vulnerability
Врска: http://www.zeroscience.mk/mk/vulnerabilities/ZSL-2011-4988.php
Безб. предупредување ID:ZSL-2011-4989
Наслов: Oracle MySQL Eventum 2.3 Remote Script Insertion Vulnerabilies
Врска: http://www.zeroscience.mk/mk/vulnerabilities/ZSL-2011-4989.php
5. Препораки
Кога развивате веб апликации, било да сте програмер или проект менаџер, би требало секогаш да ја имате безбедноста на ум. Постојат такви техники и функции кои ви овозможуваат да развиете постабилна и побезбедна апликација за вашите клиенти. Исто така постојат и Web Application Firewall (WAF) апликации и за Windows и за Linux. (Еве некоја листа: http://www.owasp.org/index.php/Web_Application_Firewall)
Користете избегнувања на специјални карактери каде што треба, санирање на формулари и скрипти што качуваат (upload) податоци, валидација, двојна проверка на функции со бази на податоци и сл. Функции како:
htmlspecialchars(), htmlentities(), mysql_real_escape_string(), addslashes(), preg_match(), stip_tags(), nl2br(), escapeshellarg()
и т.н.
Извршувајте безбедносни проценки и следете ги најновите вести од безбедносната индустрија како и порталите што објавуваат нови ранливости и техники на заобиколување на безбедносните механизми.
6. Корисни линкови и референци
- http://zeroscience.mk/mk/vulnerabilities/
- http://koduleht.eu/phptest/index.php
- http://koduleht.eu/phptest/taketest.php?11
- http://www.phpfreaks.com/tutorial/php-security
- http://grasp.coresecurity.com/index.php?m=chl
- http://www.ibm.com/developerworks/opensource/library/os-php-secure-apps/index.html
- http://net.tutsplus.com/tutorials/php/5-helpful-tips-for-creating-secure-php-applications/
- http://it.com.mk/lista-na-softver-za-revizija-na-izvoren-kod/
- http://www.gnucitizen.org/static/blog/2008/04/php-code-analysis-real-world-examples.pdf
- http://exploit-db.com
- http://secunia.com
- http://php-ids.org/
- http://osvdb.org
- http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
- http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
- http://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
- http://www.owasp.org/index.php/URL_Access_Prevention_Cheat_Sheet
- http://www.owasp.org/index.php/Injection_Prevention_Cheat_Sheet
- http://www.owasp.org/index.php/Esapi
- http://ha.ckers.org/xss.html
- http://phpsec.org/projects/guide/
- http://www.acunetix.com/websitesecurity/php-security-1.htm
- http://securitytube.net
- http://packetstormsecurity.org
- http://securityfocus.com
- http://vupen.com
- http://www.owasp.org/index.php/OWASP_Testing_Guide_v3_Table_of_Contents
- The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilitiesод Mark Dowd, John McDonald и Justin Schuh.
Ѓоко Крстиќ
[email protected]
[…] This post was mentioned on Twitter by itcommk, arangel. arangel said: Информациско безбедносна проценка на веб апликации (изучување на случај, дел II) http://t.co/xvtKYeQ via @itcommk […]