CodeMirror 的 Markdown 模式中发现了一处 ReDoS 漏洞
页:1 在 CodeMirror 的 Markdown 模式中发现了 ReDoS 的弱点 。 特制的输入字符串在几个正则表达式中会触发灾难性回溯,使受影响的应用被冻结或显著地降低其性能. 这种脆弱性可以在任何使用CodeMiror的Markdown模式,导致拒绝提供“DoS”服务的环境(浏览器或服务器)中加以利用。
详细情况 模式/markdown/markdown中的多正则表达式模式. js文件容易被指数回溯. 问题在于使用贪婪的限定词(例如+或*)与无约束的捕捉组结合使用,这些组最终必须匹配一个终止的符. 当提供一个最终无法匹配模式的极长字符串(例如由于结尾处有一个额外的字符)时,引擎会过度回溯.
以下是一些具有代表性的脆弱模式,以及引发它们的攻击弦:
- 跟踪空间检查
脆弱代码 : {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? 如果( stream.match (/ + $/, 假))
触发有效载荷 :
‘'"+".repeat(100000)+"@"
问题: " /+美元/ " 模式使用一种贪婪的限定词,在线末锚( " 美元 " )之前没有长度限制,导致输入的100,000个空格出现指数回溯,然后是非空间字符。
2. 图像/链接前缀检查
脆弱代码 :
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
如果(ch QQ"!" ) QQ stream. match (/\ [[@]]]) ? (?:\ (|\/,假名)触发有效载荷 : ‘''+". repeat(100000)+".
问题:[^\]]'的使用是无界限的,如果输入上千个重复的['字符,就会导致灾难性的倒退。
- 链接后缀检查
脆弱代码 : {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? if (ch QQ'])' sate.linkText QQ stream. match (/\ (. ?) ) @? @ [.?]/, 假).
触发有效载荷 :
‘''+"(.repeat (100000)+"\n@".
问题:由于输入由许多重复(字符后为新线和不匹配字符)组成的总体模式复杂,不光彩的`.*? ' 仍然造成大规模倒退。
4. Angle Bracket 电子邮件检查 :
脆弱代码 :
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
如果(ch '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''触发有效载荷 : ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
问题:未绑定的字符类`[^[ >\] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 嵌入式链接检查 脆弱代码 : {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? 如果(ch ''''''' '''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
触发有效载荷 :
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
问题:使用无约束的`[^\]'和`(.*\)'进一步加大了用精心制作的投入进行指数回溯的风险。
使用负视前置的拟议修正 :
为了减轻脆弱性,我们建议用不需要灾难性倒退的模式来取代脆弱的正则模式。 对于
. . . . . . .内容来源: codemirror/codemirror5