4

我有一个通过 procmail 启动的 bash 脚本。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

如果您好奇,这是让我想到这个问题的实际用例

4

3 回答 3

0

我不是安全专家,但任何未经清理的用户输入中都存在注入漏洞——尤其是当您将原始输入发送到可能具有特权访问权限的系统命令时。在执行此操作之前,请始终验证您的输入。

在将它们发送到您的邮件系统之前,检查$1$2确保它们只包含可打印的字符并且长度合理,例如少于 1000 个字符。

这并不难做到,它可以防止你受到一些未知漏洞的攻击。

我喜欢 Perl 的一件事是污点模式,它会阻止你做这样的事情,除非你先清理了数据。

于 2011-01-03T21:06:24.543 回答
0

shell 脚本本身非常安全。邮件最易受攻击的部分是标题,您不允许邮件发件人更改其中的任何内容。

我在脚本中看到的唯一方法是有人可以在一行上传递一个点,这会提前结束邮件。并且可能存在使用 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,因为我不知道引用规则。这可能是攻击者可以注入代码的地方,因此您需要查看手册中的规则并对其进行测试以确定。您应该测试的一些字符是$, ", \, 换行符。

于 2011-01-03T22:04:00.917 回答
0

为了避免注入问题,您还可以通过一个脚本将所有消息通过管道传输到您关心的地址,该脚本从标准输入读取消息并本机解析出您感兴趣的标头。

然后,您可以使用以您选择的脚本语言提供的库,将 SMTP 与本地运行的邮件服务器通信。

这样,就没有命令执行,也无需担心未经处理的输入被用作程序的参数。

于 2011-01-04T00:30:08.823 回答