Qu'est-ce que, le cas échéant, les vulnérabilités d'injection sont là en bash et comment puis-je protéger contre eux?

StackOverflow https://stackoverflow.com/questions/4587509

  •  14-10-2019
  •  | 
  •  

Question

J'ai un script bash que je suis le coup d'envoi via procmail. Procmail passe dans le sujet et à partir d'un e-mail comme arguments au script bash. Étant donné que ces valeurs sont assainies en aucune façon, j'essaie de savoir s'il y a des vulnérabilités d'injection dans bash que quelqu'un pourrait tirer profit et si oui ce que je peux faire pour protéger contre ces derniers. Voici quelques exemples de code pour illustrer ce qui se passe:

#!/bin/bash
/usr/sbin/sendmail -t <<EOF
From: "myhost Administrator" <admin@myhost.example.com>
To: john_doe@gmail.com
Subject: An email subject

You've received a new email.
It has a subject of "$2"
It was sent from "$1".
EOF

Ce script bash serait appelé par procmail avec un script .procmailrc comme ceci:

:0
* ^From:\s*\/.*
{
 FROM = "$MATCH"
}

:0
* ^Subject:\s*\/.*
{
 SUBJECT = "$MATCH"
}

:0 c:
* ^To:.*@example.com
| /home/john_doe/examplescript.bash "$FROM" "$SUBJECT"

Les deux domaines que je me demande sur les vulnérabilités d'injection sont pour l'instanciation du script:

/home/john_doe/examplescript.bash "$FROM" "$SUBJECT"

et l'utilisation des variables dans le script.

/usr/sbin/sendmail -t <<EOF
From: "myhost Administrator" <admin@myhost.example.com>
To: john_doe@gmail.com
Subject: An email subject

You've received a new email.
It has a subject of "$2"
It was sent from "$1".
EOF

Si votre curieux,

Autres conseils

Je ne suis pas un expert en sécurité, mais les vulnérabilités d'injection dans une entrée existe d'utilisateur non aseptisé - surtout si vous envoyez cette entrée premières aux commandes du système qui peuvent avoir un accès privilégié. Vérifiez toujours votre entrée avant de le faire.

Vérifiez $1 et $2 pour vous assurer qu'ils ne contiennent que des caractères imprimables et sont une longueur raisonnable, comme en 1000 caractères, avant de les envoyer à votre système de messagerie.

Ce n'est pas trop difficile à faire, et il vous empêche d'être frappé d'une certaine inconnue Exploita.

L'une des choses que je aime Perl est le taint mode qui vous empêche de faire des choses comme ça, sauf si vous avez nettoyé les données en premier.

Le script shell en lui-même est assez sûr. La plupart vulnérables d'un courrier est l'en-tête, et vous ne laissez pas l'expéditeur du courrier à quoi que ce soit de changement en elle.

La seule façon que je vois dans le script est que quelqu'un pourrait passer d'un point sur une seule ligne, ce qui mettrait fin à la poste prématurément. Et il peut y avoir le cas d'incorporation des pièces jointes à l'aide uuencode comme ceci:

Subject: subject
From: sender@example.com
To: receiver@example.com

text line 1
text line 2

begin 644 file-containing-abc
$86)C"G]_
`
end

Je suis inquiet au sujet de la ligne du .procmailrc, puisque je ne connais pas les règles de cotation. Cela pourrait être un point où un attaquant pourrait injecter du code, de sorte que vous devez rechercher les règles dans le manuel et les tester pour être sûr. Certains caractères que vous devez tester sont $, ", \, les nouvelles lignes.

scroll top