CVE-2026-28505Tautulli 2.17.0之前的版本中,notification_handler.py的str_eval()函数存在沙箱绕过漏洞。该沙箱仅检查代码对象的co_names以限制可调用名称,但未检查lambda表达式创建的嵌套代码对象(位于co_consts中)。攻击者可利用此缺陷绕过沙箱限制,执行任意Python代码。
该漏洞源于Python代码对象编译机制的差异。Tautulli的沙箱机制试图通过检查编译后代码对象的co_names属性来过滤危险函数调用。然而,当用户输入包含lambda表达式时,Python编译器会将lambda内部的代码作为一个嵌套的代码对象存储在外层代码对象的co_consts常量元组中,而不是co_names中。由于沙箱代码只遍历co_names进行校验,完全忽略了co_consts中隐藏的嵌套代码逻辑。攻击者可以构造形如(lambda: __import__('os').system('cmd'))()的Payload,使其在沙箱检查时看似无害,但在eval执行时,lambda内部实际包含了危险的系统调用,从而实现沙箱逃逸和远程代码执行。