[pve-devel] [RFC/PATCH storage] Fix #1925: untaint rbd JSON output

Stoiko Ivanov s.ivanov at proxmox.com
Tue Sep 18 18:13:45 CEST 2018


Untainting without any sanitization, since the JSON::decode_json call below
should sanitize the output.

Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
---
Not quite sure whether this approach is not too liberal.
It does fix the bug reported, thus I'm sending it as an RFC.


 PVE/Storage/RBDPlugin.pm | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm
index ee373d6..10cbde2 100644
--- a/PVE/Storage/RBDPlugin.pm
+++ b/PVE/Storage/RBDPlugin.pm
@@ -157,7 +157,13 @@ sub rbd_ls {
     my $pool =  $scfg->{pool} ? $scfg->{pool} : 'rbd';
 
     my $raw = '';
-    my $parser = sub { $raw .= shift };
+    my $parser = sub {
+	#untainting here because JSON::decode_json, does the sanitization
+	my $line = shift;
+	if ($line =~ m/^(.*)$/) {
+	    $raw .= "$1";
+	}
+    };
 
     eval {
 	run_rbd_command($cmd, errmsg => "rbd error", errfunc => sub {}, outfunc => $parser);
@@ -202,7 +208,13 @@ sub rbd_volume_info {
     $cmd = &$rbd_cmd($scfg, $storeid, @options);
 
     my $raw = '';
-    my $parser = sub { $raw .= shift };
+    my $parser = sub {
+	#untainting here because JSON::decode_json, does the sanitization
+	my $line = shift;
+	if ($line =~ m/^(.*)$/) {
+	    $raw .= "$1";
+	}
+    };
 
     run_rbd_command($cmd, errmsg => "rbd error", errfunc => sub {}, outfunc => $parser);
 
-- 
2.11.0




More information about the pve-devel mailing list