Ist dieser pipe sicher für feindliche input?

10/12/2007 - 08:58 von Gyelt Tuinstra | Report spam
Ich möchte mit einem shell-script Dateien verarbeiten. Die Dateien
sind potentiell bösartig konstruiert. Gerne wusste ich, ob was
schief gehen könnte, wenn ich die Dateien so verarbeite:

#!/bin/bash
# initialisieren Werte
WERT1="0"
WERT2="keine"
WERT3="nee"

DATEI="input"

for KOMMANDO in WERT1 WERT2 WERT3
do
if ( grep -q "^${KOMMANDO}=" $DATEI )
then
VALUE=`grep "^${KOMMANDO}=" $DATEI | tail -1 | \
cut -f2 -d"=" | sed -e "s/[^[:alnum:] ,-]//g"`

if [ ${#VALUE} -gt 50 ]
then
echo "Wert zu lang, exit"; exit 1
fi
eval $KOMMANDO="${VALUE}"
fi
done

# Verarbeitung variabelen
if [ $WERT1 == "ja" ]
then
TEXT="irgendeiner Textbaustein"
else
TEXT=""
fi
...usw

In Text: das Skript sollte eine Datei durchsuchen auf folgende
konstruktion:

WERT1=irgendeine sinnvolle tekst

und alles andere ignorieren. Böswillige Werte sollten entkraftet werden,
damit über dem eval-Kommando keinen shell erreicht werden kann.
Verarbeitungsgeschwindigkeit ist kein Thema.


Danke für euere input.

Gyelt

'tschuldige evt. Schreibfehler, bitte, Deutsch ist nicht meine Muttersprache
 

Lesen sie die antworten

#1 Hauke Laging
10/12/2007 - 12:40 | Warnen spam
Gyelt Tuinstra wrote:

sed -e "s/[^[:alnum:] ,-]//g"`



Nur mal so interessehalber: Wie soll der Inhalt denn aussehen?


eval $KOMMANDO="${VALUE}"



Wie immer bei eval (quasi unabhàngig von Sicherheit): alle Quotingebenen
beachten:

eval $KOMMANDO="\"${VALUE}\""

Wenn alle [:alnum:] raus sind, wird es natürlich schwierig, noch Befehle
aufzurufen, aber ich stelle mir gerade vor, dass $VALUE etwa so aussieht:
$(...) oder `...` :-) Wenn man dann noch einen Weg findet, die
[:alnum:]-Löschung zu umgehen, so dass man sich mit irgendwas a la $'\123'
behelfen kann, dann kann man plötzlich unerfreuliche Sachen machen.

Also vielleicht den eval-Block als nobody im chroot laufen lassen; für alle
Fàlle.


CU

Hauke

Ähnliche fragen