CodeQL 文档

格式化函数参数不足

ID: cpp/wrong-number-format-arguments
Kind: problem
Security severity: 5.0
Severity: error
Precision: high
Tags:
   - reliability
   - correctness
   - security
   - external/cwe/cwe-234
   - external/cwe/cwe-685
Query suites:
   - cpp-code-scanning.qls
   - cpp-security-extended.qls
   - cpp-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

printf 函数或相关函数的每次调用都应包含格式定义的参数数量。向函数传递比所需参数更多的参数是无害的(虽然这可能表明存在其他缺陷)。但是,向函数传递少于格式定义的参数数量可能会成为安全漏洞,因为函数将处理栈上的下一个项目作为缺少的参数。

这可能导致信息泄露,如果栈上的敏感值被打印出来。如果栈上的值被解释为指针并导致访问未映射的内存,则可能导致崩溃。最后,如果攻击者可以利用此问题导致输出字符串过长或内容意外,则可能导致后续漏洞。

建议

查看突出显示的函数调用所需的格式和参数。更新格式或参数,以便向函数传递预期数量的参数。

示例

int main() {
  printf("%d, %s\n", 42); // Will crash or print garbage
  return 0;
}

参考文献

  • ©GitHub, Inc.
  • 条款
  • 隐私