Nmap Security Scanner
*Intro
*Ref Guide
*Install Guide
*Download
*Changelog
*Book
*Docs
Security Lists
*Nmap Hackers
*Nmap Dev
*Bugtraq
*Full Disclosure
*Pen Test
*Basics
*More
Security Tools
*Pass crackers
*Sniffers
*Vuln Scanners
*Web scanners
*Wireless
*Exploitation
*Packet crafters
*More
Site News
Site Search:
Exploit World
Advertising
About/Contact
Credits
Sponsors:
edgeos



Full Disclosure: Buffer-overflow in Ultr@VNC 1.0.1 viewer and server

Buffer-overflow in Ultr@VNC 1.0.1 viewer and server

From: Luigi Auriemma <aluigi_at_autistici.org>
Date: Tue, 4 Apr 2006 21:24:13 +0200

#######################################################################

                             Luigi Auriemma

Application: Ultr_at_VNC
              http://www.ultravnc.com
              http://ultravnc.sourceforge.net
Versions: <= 1.0.1 (and current CVS)
              (tabbed_viewer 1.29 is ever the same VNC viewer 1.0.1 and
              so it's vulnerable too)
Platforms: Windows
Bugs: A] client Log::ReallyPrint buffer-overflow
              B] server VNCLog::ReallyPrint limited buffer-overflow
Exploitation: A] remoto, versus client
              B] remoto, versus server
Date: 04 Apr 2006
Author: Luigi Auriemma
              e-mail: aluigi_at_autistici.org
              web: http://aluigi.altervista.org

#######################################################################

1) Introduction
2) Bugs
3) The Code
4) Fix

#######################################################################

===============
1) Introduction
===============

Ultr_at_VNC is a well known open source VNC server and viewer for Windows
very easy to use and configure.

#######################################################################

=======
2) Bugs
=======

------------------------------------------
A] client Log::ReallyPrint buffer-overflow
------------------------------------------

During the login process a VNC client can receive three types of
replies from the server: connection failed, no authentication and
authentication required.
The first type of reply (rfbConnFailed) is followed by a text string
containing the reason of the disconnection.
Before visualizing this message Ultr_at_VNC logs everything in the log
file using the vnclog.Print function which adopts a buffer of 1024
bytes (LINE_BUFFER_SIZE) for storing the text.
The result is that a malicious VNC server could be able to execute
malicious code versus a vulnerable Ultr_at_VNC client which connects to
it.

>From vncviewer/Log.cpp:

void Log::ReallyPrint(LPTSTR format, va_list ap)
{
    TCHAR line[LINE_BUFFER_SIZE];
    _vstprintf(line, format, ap);
    if (m_todebug) OutputDebugString(line);

    if (m_toconsole) {
        DWORD byteswritten;
        WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), line, _tcslen(line)*sizeof(TCHAR), &byteswritten, NULL);
    };

    if (m_tofile && (hlogfile != NULL)) {
        DWORD byteswritten;
        WriteFile(hlogfile, line, _tcslen(line)*sizeof(TCHAR), &byteswritten, NULL);

    }
}

-----------------------------------------------------
B] server VNCLog::ReallyPrint limited buffer-overflow
-----------------------------------------------------

The logging function used by the Ultr_at_VNC server is affected by a
limited buffer-overflow caused by two strcat calls which add a Windows
error message to the output buffer.
Anyway there is an important detail about the exploitation of this bug.
The server is not vulnerable if the admin doesn't touch the "Log debug
infos to the WinVNC.log file" flag in the configuration, but when the
admin enables this option his server will be vulnerable forever
although he will re-disable it.

>From winvnc/winvnc/vnclog.cpp:

void VNCLog::ReallyPrint(const char* format, va_list ap)
{
        time_t current = time(0);
        if (current != m_lastLogTime) {
                m_lastLogTime = current;
                ReallyPrintLine(ctime(&m_lastLogTime));
        }

        // - Write the log message, safely, limiting the output buffer size
        TCHAR line[LINE_BUFFER_SIZE];
        TCHAR szErrorMsg[LINE_BUFFER_SIZE];
        DWORD dwErrorCode = GetLastError();
        SetLastError(0);
        FormatMessage(
         FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwErrorCode,
         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(char *)&szErrorMsg,
         LINE_BUFFER_SIZE, NULL);
    _vsnprintf(line, LINE_BUFFER_SIZE, format, ap);
        strcat(line," --");
        strcat(line,szErrorMsg);

        ReallyPrintLine(line);
}

#######################################################################

===========
3) The Code
===========

http://aluigi.altervista.org/poc/uvncbof.zip

#######################################################################

======
4) Fix
======

A patch will be released in the next weeks.

#######################################################################

---
Luigi Auriemma
http://aluigi.altervista.org

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

[ Nmap | Sec Tools | Mailing Lists | Site News | About/Contact | Advertising | Privacy ]
edgeos