Core Concepts
现有的大型语言模型和基于深度学习的自动程序修复技术只能修复很少数量的Java脆弱性。Codex是最出色的,平均可以修复10.2个(20.4%)脆弱性。通过使用一般的自动程序修复数据对语言模型进行微调可以提高它们修复脆弱性的能力。但是这些模型仍然无法修复许多常见的脆弱性类型,如CWE-325 Missing cryptographic step和CWE-444 HTTP request smuggling。
Abstract
本文研究并比较了大型语言模型(LLMs)和基于深度学习的自动程序修复(APR)技术在修复Java安全脆弱性方面的能力。
首先,作者创建了一个新的Java脆弱性基准测试集VJBench,包含42个来自30个开源项目的可重现的真实世界Java脆弱性,涵盖了12个新的CWE类型。这个新基准测试集补充了现有的Vul4J数据集。
作者评估了5个LLMs(Codex、CodeT5、CodeGen、PLBART和InCoder)、4个微调后的LLMs以及4个基于深度学习的APR技术(CURE、Recoder、RewardRepair和KNOD)在这两个Java脆弱性基准测试集上的修复能力。
研究结果包括:
现有的LLMs和APR技术只能修复很少数量的Java脆弱性。Codex是最出色的,平均可以修复10.2个(20.4%)脆弱性。
使用一般的APR数据对LLMs进行微调可以提高它们修复脆弱性的能力。微调后的InCoder可以修复9个脆弱性,与Codex的性能相当。
Codex的编译率最高为79.7%,而其他LLMs(无论是否微调)和APR技术的编译率都较低(最低为6.4%),显示它们缺乏对代码语法的理解。
除了Codex,其他LLMs和APR技术只能修复需要简单修改(如删除语句或替换变量/方法名)的脆弱性。Codex可以修复更复杂的脆弱性,如CWE-611和CWE-918。
作者创建了VJBench-trans基准测试集,通过代码转换生成了150个未被LLMs和APR技术训练集覆盖的脆弱性。在这个基准上,Codex仍然可以修复8.7个转换后的脆弱性,优于其他所有LLMs和APR技术。
总的来说,现有的LLMs和APR技术在修复Java脆弱性方面还存在很大局限性,需要进一步创新,如扩大脆弱性修复训练数据、针对脆弱性进行LLMs微调,以及应用代码简化转换等。
Stats
Codex平均可以修复10.2个(20.4%)脆弱性。
微调后的InCoder可以修复9个脆弱性。
Codex的编译率为79.7%,而其他LLMs和APR技术的编译率在6.4%到65.2%之间。
Quotes
"Codex fixes 10.2 (20.4%), the most number of vulnerabilities."
"Fine-tuned InCoder fixes 9 vulnerabilities, exhibiting competitive fixing capability compared to Codex's."
"Codex has the highest compilation rate of 79.7%. Other LLMs (fine-tuned or not) and APR techniques have low compilation rates (the lowest of 6.4% with CodeT5 and the rest between 24.5% to 65.2%), showing a lack of syntax domain knowledge."