Webmin miniserv.pl perl format string vulnerability

SUMMARY.   The webmin `miniserv.pl' web server component is vulnerable to a new class of exploitable (remote code) perl format string vulnerabilities. During the login process it is possible to trigger this vulnerability via a crafted username parameter containing format string data. In the observed configuration the process was running as the user root, so if remote code execution is successful, it would lead to a full remote root compromise in a standard configuration. A valid login is not required to trigger this vulnerability, only access to the miniserv.pl port (default 10000).

Date Found: September 23, 2005.
Public Release: November 29, 2005.
Application: webmin miniserv.pl, all known versions
Credit: Jack Louis of Dyad Security
CVE: CVE-2005-3912

BACKGROUND.   miniserv.pl is a part of the webmin system administration front end, written in perl by Jamie Cameron. more details are available at http://www.webmin.com.

DESCRIPTION.   The username parameter of the login form is logged via the perl `syslog' facility in an unsafe manner during a unknown user login attempt. the perl syslog facility passes the username on to the variable argument function sprintf that will treat any format specifiers and process them accordingly.

DETAILS.   The vectors for a simple DoS of the web server are to use the %n and %0(large number)d inside of the username parameter, with the former causing a write protection fault within perl leading to script abortion, and the latter causing a large amount of memory to be allocated inside of the perl process.

A generic remote code execution exploit method has been developed by a third party that is reachable though this hole itself.

The following is the section of code in question. (from miniserv.pl)

if ($use_syslog && !$validated) {
        syslog("crit",
               ($nonexist ? "Non-existent" :
                $expired ? "Expired" : "Invalid").
               " login as $authuser from $acpthost");
        }

As can be clearly seen with this section of code, the user supplied data is clearly within the format specification of the syslog call.

FIXES.   There is an official fix for this issue at the main webmin site, but we have also provided some sample patches for the older versions.

0) webmin 1.220 format string patch
1) webmin 1.230 format string patch
2) webmin 1.240 format string patch

LEGAL NOTICES.  
Copyright © 2005 Dyad Security, Inc.

Permission is granted for the redistribution of this alert electronically. It may not be edited in any way without the express written consent of Dyad Security, Inc. If you wish to reprint the whole or any part of this alert in any other medium other than electronically, please email advisoryreprint@dyadsecurity.com for permission.

DISCLAIMER.  
The information in the advisory is believed to be accurate at the time of publishing based on currently available information. Use of the information constitutes acceptance for use in an AS IS condition. There are no warranties with regard to this information. Neither the author nor the publisher accepts any liability for any direct, indirect, or consequential loss or damage arising from use of, or reliance on, this information.

SEE ALSO.  
Perl format string integer wrap vulnerability


OSSTMM Professional Security Tester (OPST).
The OPST certification is the official security testing certification based on the Open Source Security Testing Methodology Manual. The premise of the certification is to assure that a security tester has the necessary technical skills, ethics, and business training to be an efficient and resourceful security tester.

Dates: Mon Feb 13th through Fri Feb 17th 2006.
Cost: Course and Exam - US $2,900
Group discounts available
Location: Irvine, CA
Registration: Please fill in the registration form.

DYAD SECURITY INC. © 2005