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}&nbsp;
{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. Корисни линкови и референци


Ѓоко Крстиќ
gjoko@zeroscience.mk

1 коментар на “Информациско безбедносна проценка на веб апликации (изучување на случај, дел II)

Коментирај

Вашата адреса за е-пошта нема да биде објавена.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Слични статии