Abysssec Research: 1) Advisory Information
Abysssec Research: 1) Advisory Information
Abysssec Research: 1) Advisory Information
Abysssec Research
1)
Advisory
information
2)
Vulnerable
version
Apple
QuickTime
Player
7.6.5
Apple
QuickTime
Player
7.6.4
Apple
QuickTime
Player
7.6.2
Apple
QuickTime
Player
7.6.1
Apple
QuickTime
Player
7.6
Apple
Mac
OS
X
Server
10.6.2
Apple
Mac
OS
X
Server
10.6.1
Apple
Mac
OS
X
Server
10.6
Apple
Mac
OS
X
10.6.2
Apple
Mac
OS
X
10.6.1
Apple
Mac
OS
X
10.6
3)
Vulnerability
information
Class
1-‐
Code
execution
Impact
Successful exploits may allow attackers to execute arbitrary code in the context of
the currently logged-in user; failed exploit attempts will cause denial-of-service
conditions.
Remotely
Exploitable
Yes
Locally
Exploitable
Yes
4)
Vulnerabilities
detail
Integer
overflow:
The
FlashPix
file
format
structure
is
similar
to
a
system
file
in
which
the
whole
file
consists
of
storages
and
streams.
A
storage
is
similar
to
a
folder
in
a
system
file
and
a
stream
is
analogous
to
a
file.
Every
storage
can
contain
other
storages
and
streams
in
exactly
the
same
way
that
every
folder
can
contain
folders
and
files
in
a
system
file.
The
image
below
shows
the
concept:
One
of
the
various
streams
that
exist
in
the
file
format
is
SubImage.
The
SubImage
steam
consists
of
a
Header
and
Data
where
the
Header
is
responsible
for
Data
details
and
Data
contains
image
information.
In
this
file
format,
the
image
is
divided
to
64pix*64pix
tiles
and
the
number
of
tiles
are
stored
in
the
SubImage
stream
header.
The
QuickTime
Player
software
reads
the
number
of
tiles
from
the
NumberOfTiles
field
of
the
header,
multiplies
it
by
16,
and
allocates
the
required
heap
memory
based
on
the
result
of
the
multiplication.
In
the
next
stage,
the
app
copies
the
information
to
the
allocated
memory
based
on
the
number
of
tiles.
In
cases
where
the
result
of
the
multiplication
is
more
than
32bits,
the
allocated
memory
will
be
less
than
the
length
of
the
NumberOfTiles
in
the
file
and
we
can
write
to
the
heap
with
the
size
of
the
substitution
of
these
two
numbers.
Now
we
are
going
to
explain
the
binary
based
on
the
discussed
material:
In the next section, the values will be copied to memory in a loop that is controlled by NumberOfTiles.
.text:67ADB743
mov
edx,
[ecx]
.text:67ADB745
mov
eax,
[edx+8]
.text:67ADB748
push
0
.text:67ADB74A
push
ebx
.text:67ADB74B
call
eax
.text:67ADB74D
test
al,
al
.text:67ADB74F
jz
short
loc_67ADB7BF
.text:67ADB751
mov
eax,
[esi+56h]
.text:67ADB754
mov
ecx,
[esi+5Eh]
.text:67ADB757
mov
eax,
[eax]
.text:67ADB759
mov
edx,
[ecx]
.text:67ADB75B
mov
edx,
[edx+1Ch]
.text:67ADB75E
add
eax,
edi
.text:67ADB760
push
eax
.text:67ADB761
call
edx
.text:67ADB763
test
al,
al
.text:67ADB765
jz
short
loc_67ADB7BF
.text:67ADB767
mov
edx,
[esi+56h]
.text:67ADB76A
mov
ecx,
[esi+5Eh]
.text:67ADB76D
mov
edx,
[edx]
.text:67ADB76F
mov
eax,
[ecx]
.text:67ADB771
mov
eax,
[eax+1Ch]
.text:67ADB774
lea
edx,
[edx+edi+4]
.text:67ADB778
push
edx
.text:67ADB779
call
eax
.text:67ADB77B
test
al,
al
.text:67ADB77D
jz
short
loc_67ADB7BF
.text:67ADB77F
mov
eax,
[esi+56h]
.text:67ADB782
mov
ecx,
[esi+5Eh]
.text:67ADB785
mov
eax,
[eax]
.text:67ADB787
mov
edx,
[ecx]
.text:67ADB789
mov
edx,
[edx+1Ch]
.text:67ADB78C
lea
eax,
[eax+edi+8]
.text:67ADB790
push
eax
.text:67ADB791
call
edx
.text:67ADB793
test
al,
al
.text:67ADB795
jz
short
loc_67ADB7BF
.text:67ADB797
mov
edx,
[esi+56h]
.text:67ADB79A
mov
ecx,
[esi+5Eh]
.text:67ADB79D
mov
edx,
[edx]
.text:67ADB79F
mov
eax,
[ecx]
.text:67ADB7A1
mov
eax,
[eax+1Ch]
.text:67ADB7A4
lea
edx,
[edx+edi+0Ch]
.text:67ADB7A8
push
edx
.text:67ADB7A9
call
eax
.text:67ADB7AB
test
al,
al
.text:67ADB7AD
jz
short
loc_67ADB7BF
.text:67ADB7AF
add
ebx,
[esi+36h]
.text:67ADB7B2
add
ebp,
1
.text:67ADB7B5
add
edi,
10h
.text:67ADB7B8
cmp
ebp,
[esi+22h]
.text:67ADB7BB
jb
short
loc_67ADB740
.text:67ADB7BD
jmp
short
loc_67ADB7C7
The
value
of
NumberOfTiles
which
exists
in
esi+22h
is
checked
against
the
EBP
register
as
a
counter
at
address
67ADB7B8
and
in
if
the
counter
is
less
than
NumberOfTiles,
the
execution
flow
will
be
moved
to
the
beginning
of
the
loop.
At
the
next
stage,
EBP
will
be
incremented
by
1
and
16
will
be
added
to
the
EDI
register
where
EDI
is
the
index
of
reading
memory.
If
we
change
the
first
NumberOfTiles
value
to
41414141
at
address
668E27EC,
an
Access
violation
error
occurs.