Arara 安全吗?

Arara 安全吗?

我刚开始玩arara我很好奇是否存在安全问题。例如,pdflatexTeX Live 默认禁用了 shell 转义。如果 TeX Live 团队认为 shell 转义太危险(我不确定这是禁用它的原因)而不能默认启用,那么我不确定赋予arara这么大的权力是否明智。有没有办法控制 的权力arara

我担心的是,可能会将恶意arara指令注入到包或aux文件中。

我不太关心 shell 逃逸,而是关心其他可以做的事情。例如,不受信任的包是否可以使用文件内容环境覆盖pdflatex第一遍的规则,以便在第二遍运行自定义代码?

答案1

我认为我的回答会带有偏见,但我还是想说一下。:)

对我来说,确定它arara是否安全是一个相当主观的问题。它只是一个具有特定用途的程序,就像大多数可用的工具一样。也许我能想到的最佳答案是:视情况而定。

arara本质上只是通过指定扩展方式的规则将指令扩展为命令。然后,命令被委托给底层操作系统。

该程序需要有效的指令(映射到规则)才能运行,否则进程将停止。

Uh-oh, I could not find the 'foo' rule in the search path. Could
you take a look if the rule name is correct and if the rule is
accessible through the search path?

如果没有指示,arara也会抱怨。

I didn't find any directives in 'test.tex', and so didn't do
anything. Is that what you really wanted?

如果我们在启用arara--log选项的情况下运行,我们就可以获得文件中找到的指令列表.tex

21 Mar 2013 07:32:10.630 INFO  Arara - Welcome to arara!
21 Mar 2013 07:32:10.634 INFO  Arara - Processing file 'folheto.tex', please wait.
21 Mar 2013 07:32:10.635 INFO  DirectiveExtractor - Reading directives from folheto.tex.
21 Mar 2013 07:32:10.649 TRACE DirectiveExtractor - Directive found in line 1 with pdflatex.
21 Mar 2013 07:32:10.650 TRACE DirectiveExtractor - Directive found in line 2 with clean: { files: [ folheto.aux, folheto.log, folheto.sxc, folheto.synctex.gz ] }.
...

Heiko 建议--dry-run使用 选项arara,该选项包括模拟执行而不实际运行命令。希望它将在即将推出的版本中可用。

得到指令后,arara就会寻找规则。

...
21 Mar 2013 07:32:10.799 INFO  TaskDeployer - Deploying tasks into commands.
21 Mar 2013 07:32:10.799 TRACE TaskDeployer - Task 'pdflatex' found in '/usr/local/texlive/2012/texmf-dist/scripts/arara/rules'.
21 Mar 2013 07:32:11.010 TRACE TaskDeployer - Task 'clean' found in '/usr/local/texlive/2012/texmf-dist/scripts/arara/rules'.
21 Mar 2013 07:32:11.083 TRACE TaskDeployer - Task 'clean' found in '/usr/local/texlive/2012/texmf-dist/scripts/arara/rules'.
21 Mar 2013 07:32:11.099 TRACE TaskDeployer - Task 'clean' found in '/usr/local/texlive/2012/texmf-dist/scripts/arara/rules'.
21 Mar 2013 07:32:11.104 TRACE TaskDeployer - Task 'clean' found in '/usr/local/texlive/2012/texmf-dist/scripts/arara/rules'.
...

arara根据指令显示规则的完整路径。然后命令将被执行。

...
21 Mar 2013 07:32:11.108 INFO  CommandTrigger - Ready to run commands.
21 Mar 2013 07:32:11.108 INFO  CommandTrigger - Running 'PDFLaTeX'.
21 Mar 2013 07:32:11.108 TRACE CommandTrigger - Command: pdflatex "folheto.tex"
...

回到问题。是否有可能通过 运行恶意代码arara?是的。这有问题吗?不。:)毕竟,我们可以得到一个 Perl 程序,并故意将代码注入其执行中。或者编写一个包含恶意 Lua 代码的文件。或者在我们的系统中.tex运行一个恶意的 Makefile 。rm -rf /

我认为安全问题是有效的。让我们看一个例子,规则clean

!config
# Clean rule for arara
# author: Paulo Cereda
# requires arara 3.0+
identifier: clean
name: CleaningTool
command: <arara> @{remove}
arguments:
- identifier: remove
  default: <arara> @{isFalse(file == getOriginalFile(), isWindows("cmd /c del", "rm -f").concat(' "').concat(file).concat('"'))}

使用此指令

% arara: clean: { files: [ foo.aux, foo.log ] }

arara删除两个文件,foo.auxfoo.log。有一个重要的检查,如果没有提供指令参数,它将阻止arara删除主文件。比如说,.texfiles

% arara: clean

什么也没做。

假设我们将该default指令替换为

default: <arara> @{isWindows("cmd /c del", "rm -f").concat(' "').concat(file).concat('"')}

如果我们尝试

% arara: clean

.tex文件(可能foo.tex)将会消失!很棒不是吗?:)

当然,我们谈论的是一个错误的规则。

arara具有以下工作流程:

  1. 阅读所有指令。
  2. 找出它们对应的规律。
  3. 将指令扩展为命令。
  4. 运行所有命令。

这就是该计划背后的基本思想。

值得一提的是,该程序使用库来执行这些不允许子 shell 调用的外部命令。

无论如何,我真的不知道还能说什么。:)我们都容易受到恶意软件的攻击,但这是我们必须承担的风险。幸运的是,源代码必须可用才能达到 CTAN(不完全正确,但对于软件包来说确实如此),因此我们始终可以检查条目中是否存在可疑元素。

正如我所说,LuaTeX 允许 Lua 的 I/O,这也可能是危险的。我们有时会面临某种程度的威胁,这取决于我们的使用情况。:)

arara并且在没有沙箱的服务器中运行(或任何程序)......哎哟。:)

答案2

shell escape将允许pdflatex保存、写入、删除和调用系统中的另一个程序。有时这可能很危险,因为恶意代码可能会被调用和执行,从而危及系统。

另一方面,Arara 执行用户在文档中编写的指令。没有指令,则不会执行任何操作。这些指令由更多可爱的人;-),更易于阅读。例如,如果指令说arara: pdflatex: {shell: yes},那么它是YES,shell escape否则为NO。

简而言之,

  1. 如果您有要使用的指令shell escape,那么它才会被使用。

  2. 这些指令位于源代码的顶部,易于阅读。如果您没有编写这些指令,则可以通过放置一个来轻松禁用该选项,no这样就安全了。

  3. 使用 arara 的另一个好处是您可以有选择地启用shell escape特定文档。

因此,我觉得使用 arara 是安全的,因为作者是我的好朋友;-)

答案3

总的来说,我认为pdflatex相当安全,因为它实际上只能读取和写入文件。我知道 TeX 是图灵完备的,你可以让它吐司,但我认为做些恶意的事情需要做很多工作。另一方面,arara拥有对命令行的完全访问权限,我认为只需相对较少的工作就可以做坏事。我所考虑的安全漏洞类型可以从以下不完全工作的示例看出

% arara: pdflatex
% arara: pdflatex
\documentclass{article}
\usepackage{filecontents}

\begin{filecontents*}{pdflatex.yaml}
!config
identifier: pdflatex
name: pdflatex
command: touch temp.txt
arguments:
- identifier: target
  flag: <arara> @{parameters.target}
\end{filecontents*}

\begin{document}
Hello World
\end{document}

这个想法是filecontents利用环境来覆盖arara pdflatex规则以执行恶意操作。要执行恶意操作,您需要替换良性操作touch temp.txt并混淆filecontents,但这些都不太难。

攻击背后的想法只有在tex可以写入arara规则目录时才有效。我认为这是一个主要限制,因为我相信写入位置有相当严格的限制pdflatex。也就是说,我打算arara将当前目录添加到arara规则路径中。

攻击无法完全奏效的原因是,第二arara pdflatex条指令没有调用环境pdflatex编写的新规则filecontents,而是使用原始规则。如果编写了重载规则,并且下次arara运行时使用了恶意规则,攻击仍然会成功。这种行为对我来说有点令人惊讶,我不确定这是有意为之。尽管如此,它作为安全预防措施还是很有用的。

相关内容