CWE-456:缺少变量的初始化
查看自定义信息:
该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
与观点“研究概念”相关(CWE-1000)
与“ CISQ质量措施(2020)”相关(CWE-1305)
与“ CISQ数据保护措施”(CWE-1340)有关
该清单显示了可能出现的弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。
语言 班级:不是特定语言的(不确定的患病率)
该表指定与弱点相关的不同个人后果。该范围确定了违反的应用程序安全区域,而影响描述了如果对手成功利用这一弱点,就会产生负面的技术影响。其可能性提供了有关预期相对于列表中其他后果的特定后果的可能性的信息。例如,可能会利用弱点来实现一定的影响,但很可能会利用它来实现不同的影响。
示例1 此功能试图从用户填充的字符串中提取一对数字。
(不良代码)
示例语言:C
void parse_data(char *untrusted_input){
int m,n,错误;
error = sscanf(untrusted_input,“%d:%d”,&m,&n); 如果(eof ==错误){
die(“没有指定整数价值。DieEvil Hacker!\ n”); }/ *假设正确初始化N和M的过程 */ 该代码试图从格式化的用户提供的输入中提取两个整数值。但是,如果攻击者提供表格的输入:
(攻击代码)
123:
然后,仅将M变量初始化。随后使用N可能会导致使用非初始化变量(CWE-457)。 示例2 在这里,Java类中的非初始化字段用于很少被称为方法,这会导致丢弃NullPoInterException。
(不良代码)
示例语言:爪哇
私人用户;
公共void somemethod(){ //做一些有趣的事情。 ... //如果用户尚未正确初始化,则将NPE投掷。 字符串用户名= user.getName(); 示例3 该代码首先对用户进行身份验证,然后如果用户是管理员,则允许删除命令。
(不良代码)
示例语言:php
if(authenticate($ username,$ password)&& setadmin($ username)){
$ isadmin = true; }/.../ 如果($ isadmin){
deleteuser($ usertodelete); }如果用户是管理员,则$ ISADMIN变量设置为TRUE,但否则不可原始化。如果启用了PHP的寄存器_globals功能,则攻击者可以将$ iSadmin(例如$ isadmin)等非初始化变量设置为任意值,在这种情况下,通过将$ isadmin设置为true来获得管理员特权。 示例4 在以下Java代码中,BankManager类使用类用户的用户变量允许授权用户执行银行管理器任务。用户变量是在方法设置器中初始化的,该方法设置器从用户数据库中检索用户。然后,通过方法AuthenticateUser将用户作为未经授权的用户进行身份验证。
(不良代码)
示例语言:爪哇
公共类Bankmanager {
//允许用户执行银行经理任务 私人用户= null; 私人布尔iSuserauthentic = false; // BankManager类的构造函数 public bankmanager(){
... }//从用户数据库中检索用户 公共用户getUserFromuserDatabase(字符串用户名){
... }//使用用户名设置用户变量 public void setuser(字符串用户名){
this.user = getUserFromuserDatabase(用户名); }//身份验证用户 public boolean authenticateuser(字符串用户名,字符串密码){
if(username.equals(user.getUsername())&& password.equals(user.getPassword())){ }
Isuserauthentic = true; }返回IseSerauthentic; //执行银行经理任务的方法 ... 但是,如果在AuthenticateUser之前未调用方法设置器,则不会初始化用户变量,并且会导致NullPoInterException。该代码应在使用以下代码中之前验证用户变量是否已在使用之前已初始化。
(好代码)
示例语言:爪哇
公共类Bankmanager {
//允许用户执行银行经理任务 私人用户= null; 私人布尔iSuserauthentic = false; // BankManager类的构造函数 public bankmanager(字符串用户名){
user = getUserFromuserDatabase(用户名); }//从用户数据库中检索用户 公共用户getUserFromuserDatabase(字符串用户名){...} //身份验证用户 public boolean authenticateuser(字符串用户名,字符串密码){
如果(user == null){
system.out.println(“找不到用户” +用户名); }别的 {
if(password.equals(user.getPassword())){ }
Isuserauthentic = true; }返回IseSerauthentic; //执行银行经理任务的方法 ... 示例5 当我与err_val相同时,此示例将使test_string处于未知条件下,因为test_string未初始化(CWE-456)。取决于该代码段出现的位置(例如在功能主体内),如果将其存储在堆或堆栈上,则可能是随机的。如果变量在静态内存中声明,则可能为零或null。编译器优化可能有助于该地址的不可预测性。
(不良代码)
示例语言:C
char *test_string;
如果(i!= err_val) {
test_string =“ Hello World!”; }printf(“%s”,test_string); 到达printf()时,test_string可能是一个意外的地址,因此printf可能会打印垃圾字符串(CWE-457)。 为了修复此代码,有几种方法可以确保Test_string在达到printf()后才正确设置。 一种解决方案是将test_string设置为有条件之前的可接受默认值:
(好代码)
示例语言:C
char *test_string =“开始完成”;
如果(i!= err_val) {
test_string =“ Hello World!”; }printf(“%s”,test_string); 另一个解决方案是确保条件的每个分支(包括默认分支)可以确保设置test_string:
(好代码)
示例语言:C
char *test_string;
如果(i!= err_val) {
test_string =“ Hello World!”; }别的 {
test_string =“在另一侧完成!”; }printf(“%s”,test_string);
此成员关系表显示了其他CWE类别和视图,将此弱点称为成员。该信息通常可用于理解弱点适合外部信息源的何处。
关系
这种弱点是许多结果弱点的主要因素,尤其是在Web应用程序中允许全局变量初始化(例如PHP)与可以直接请求的库。
研究差距
大量导致的弱点很可能缺少初始化,但研究人员报告通常没有提供这种细节。
提供更多信息 - 请选择其他过滤器。
|
使用共同弱点枚举(CWE)和本网站的相关参考使用条款。CWE由美国国土安全部(DHS)网络安全和基础设施安全局(CISA),由国土安全系统工程和开发研究所(HSSEDI)由manbetx客户端首页(MITER)。版权所有©2006–2023,Miter Comanbetx客户端首页rporation。CWE,CWSS,CWRAF和CWE徽标是Miter Corporation的商标。manbetx客户端首页 |