Каковы, если таковые имеются, уязвимости в инъекциях существуют в Bash и как я могу защитить от них?

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

  •  14-10-2019
  •  | 
  •  

Вопрос

У меня есть сценарий Bash, который я начну через Procmail. Procmail проходит в предмет а также из Поле из электронной почты в качестве аргументов в сценарий Bash. Поскольку эти значения не являются аннуризированными каким -либо образом, я пытаюсь выяснить, есть ли какие -либо уязвимости в инъекциях в Bash, которыми кто -то может воспользоваться, и если да, то, что я могу сделать, чтобы защитить от них. Вот какой -то пример кода, чтобы проиллюстрировать, что происходит:

#!/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

Этот скрипт Bash будет вызван Procmail с помощью скрипта .procmailrc, как это:

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

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

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

Две области, о которых мне интересно, уязвимых в инъекциях, находятся в экземпляре сценария:

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

и использование переменных в сценарии.

/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

Если вам любопытно, Вот фактический вариант использования, который вызвал этот вопрос

Это было полезно?

Решение

Чтобы избежать проблем инъекции, вы также можете просто подключить все сообщения по адресу, который вам заботится через сценарий, который считывает сообщение от Stdin и изначально анализирует заголовки, которые вас интересуют.

Затем вы можете использовать библиотеки, доступные на языке сценариев, который вы решили высказать SMTP на своем локально управляемом почтовом сервере.

Таким образом, нет никакого выполнения команды, и нет необходимости беспокоиться о том, что несадимый ввод используется в качестве аргументов для программы.

Другие советы

Я не эксперт по безопасности, но уязвимости в инъекциях существуют при каком-либо незанизированном пользовательском вводе, особенно если вы отправляете этот необработанный ввод в системные команды, которые могут иметь привилегированный доступ. Всегда проверяйте свой вклад, прежде чем делать это.

Проверять $1 а также $2 Чтобы убедиться, что они содержат только печатные символы и являются разумной длиной, например, до 1000 символов, прежде чем отправлять их в вашу почтовую систему.

Это не так сложно сделать, и это мешает вам попасть в неизвестный эксплойт.

Одна из вещей, которые мне нравится в Perl, - это Половный режим Это мешает вам делать такие вещи, если вы сначала не очистите данные.

Сценарий оболочки сам по себе довольно безопасен. Самая уязвимая часть почты - заголовок, и вы не позволяете отправителю почты что -либо изменить в нем.

Единственный способ, которым я вижу в сценарии, это то, что кто -то может пройти точку на одной линии, что преждевременно завершило бы почту. И может быть случай встраивания вложений с использованием uuencode, как это:

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

Я беспокоюсь о линии в .procmailrc, так как я не знаю правил цитирования. Это может быть моментом, когда злоумышленник может вводить код, поэтому вам нужно искать правила в руководстве и проверить их, чтобы быть уверенным. Некоторые символы, которые вы должны проверить $, ", \, новые линии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top