Lucene search

K
securityvulnsSecurityvulnsSECURITYVULNS:DOC:9067
HistoryJul 05, 2005 - 12:00 a.m.

[Full-disclosure] ekg insecure temporary file creation and arbitrary code execution

2005-07-0500:00:00
vulners.com
7

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

ekg insecure temporary file creation and arbitrary code execution

Vendor: http://dev.null.pl/ekg/
Advisory: http://www.zataz.net/adviso/ekg-06062005.txt
Vendor informed: yes
Exploit available: no
Impact : high
Exploitation : high

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

The vulnerabilities are caused due to temporary file being created
insecurely.
This can be exploited via symlink attacks in combination to create and
overwrite
arbitrary files with the privileges of the user running the affected
script and
also arbitrary command possible by spiking the temporary file.

##########
Versions:
##########

ekg <= 2005-06-05 22:03

##########
Solution:
##########

For the symlink attack use kernel patch such as grsecurity

#########
Timeline:
#########

Discovered : 2005-05-27
Vendor notified : 2005-06-06
Vendor response : no response
Vendor fix : no fix
Vendor Sec report ([email protected]) : 2005-06-27
Disclosure : 2005-07-04

#####################
Technical details :
#####################

Vulnerable code :

In contrib/scripts/linki.py

95 def czyjest ():
96 if os.path.exists('/tmp/rmrmg_ekg_url'):
97 wejsc= open ('/tmp/rmrmg_ekg_url')
98 file = wejsc.readlines()
99 dlug=len(file)
100 wejsc.close()
101 #ekg.printf("generic", "licznoΒΆΓ¦ %d" %(dlug))
102 return file
103 else:
104 return 0

Then

35 def handle_keypress(meta, key):
36 if key == 269:
37 ekg.printf("generic", "wciΒΆnieto F5")
38 nurl=czyjest()
39 if nurl == 0:
40 ekg.printf("generic", "nie ma zadnego adresu URL")
41 else:
42 dlug=len(nurl)
43 if dlug == 1:
44 ekg.printf("generic", "otwieram %s w nowej zakΒ³adce"
%(nurl[0]))
45 os.system("MozillaFirebird -remote
'openURL(%s,new-tab)'" %(nurl[0]))
46 os.system('rm /tmp/rmrmg_ekg_url')
47 else:
48 ekg.printf("generic", "linkΓ³w mam %d" %(dlug))
49 wielejest(nurl)
50 ekg.printf("generic", "otwieram %s w nowej zakΒ³adce"
%(nurl[0]))
51 os.system("MozillaFirebird -remote 'openURL(%s,
new-tab)'" %(nurl[0]))
52 elif key == 270:
53 ekg.printf("generic", "wcisniΓͺto F6")
54 nurl=czyjest()
55 if nurl == 0:
56 ekg.printf("generic", "nic nie moge skasowaæ - nie
mazadnego adresu URL")
57 else:
58 dlug=len(nurl)
59 if dlug == 1:
60 ekg.printf("generic", "kasuje adres %s" %(nurl[0]))

61 os.system('rm /tmp/rmrmg_ekg_url')
62 else:
63 ekg.printf("generic", "jest wiele linkΓ³w")
64 wielejest(nurl)
65 ekg.printf("generic", "kasuje pierwszy czyli:
%s"%(nurl[0]))
66 elif key == 271:
67 ekg.printf("generic", "wcisniΓͺto F7")
68 nurl=czyjest()
69 if nurl == 0:
70 ekg.printf("generic", "nie ma zadnego adresu URL")
71 else:
72 dlug=len(nurl)
73 if dlug == 1:
74 ekg.printf("generic", "otwieram %s w nowym
oknie"%(nurl[0]))
75 os.system("MozillaFirebird %s" %(nurl[0]))
76 os.system('rm /tmp/rmrmg_ekg_url')
77 else:
78 ekg.printf("generic", "linkΓ³w mam %d" %(dlug))
79 wielejest(nurl)
80 ekg.printf("generic", "otwieram %s w nowym
oknie"%(nurl[0]))
81 elif key == 272:
82 ekg.printf("generic", "wcisniΓͺto F8")
83 nurl=czyjest()
84 ekg.printf("generic", "F5 - otwiera w nowej zakΒ³adce; F7
wnowym oknie, a F6 kasuje, wszystko tyczy siΓͺ pierwszej po zycji
zlisty")
85 if nurl == 0:
86 ekg.printf("generic", "nie ma zadnego adresu URL")
87 else:
88 dlug=len(nurl)
89 ekg.printf("generic", "linkΓ³w mam %d oto one:" %(dlug))
90 for po in nurl:
91 ekg.printf("generic", "%s" %(po))
92 return 1

#########
Related :
#########

Gentoo Bugs report : http://bugs.gentoo.org/show_bug.cgi?id=94172
CVE : CAN-2005-1916

#####################
Credits :
#####################

Eric Romang ([email protected] - ZATAZ Audit)
Thxs to Gentoo Security Team. (Taviso, jaervosz, solar, tigger, etc.)


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