CWE-94: Improper Control of Generation of Code ('Code Injection')
 View customized information:  
	
		
		For users who are interested in more notional aspects of a weakness. Example: educators, technical writers, and project/program managers.
	
	
		
        	For users who are concerned with the practical application and details about the nature of a weakness and how to prevent it from happening. Example: tool developers, security researchers, pen-testers, incident response analysts.
	
	
		
        	For users who are mapping an issue to CWE/CAPEC IDs, i.e., finding the most appropriate CWE for a specific issue (e.g., a CVE record).  Example: tool developers, security researchers.
	
	
			
        	For users who wish to see all available information for the CWE/CAPEC entry.
	
	
		
        	For users who want to customize what details are displayed.
	
    ×
     
Edit Custom Filter This table specifies different individual consequences
                        associated with the weakness. The Scope identifies the application security area that is
                        violated, while the Impact describes the negative technical impact that arises if an
                        adversary succeeds in exploiting this weakness. The Likelihood provides information about
                        how likely the specific consequence is expected to be seen relative to the other
                        consequences in the list. For example, there may be high likelihood that a weakness will be
                        exploited to achieve a certain impact, but a low likelihood that it will be exploited to
                        achieve a different impact.
              
 
  
                        This table shows the weaknesses and high level categories that are related to this
                            weakness. These relationships are defined as ChildOf, ParentOf, MemberOf and give insight to
                            similar items that may exist at higher and lower levels of abstraction. In addition,
                            relationships such as PeerOf and CanAlsoBe are defined to show similar weaknesses that the user
                            may want to explore.
                    
         
                            Relevant to the view "Research Concepts" (View-1000)
                            
  
                            Relevant to the view "Software Development" (View-699)
                            
  
                            Relevant to the view "Weaknesses for Simplified Mapping of Published Vulnerabilities" (View-1003)
                            
  
                            Relevant to the view "Architectural Concepts" (View-1008)
                            
  The different Modes of Introduction provide information
                        about how and when this
                        weakness may be introduced. The Phase identifies a point in the life cycle at which
                        introduction
                        may occur, while the Note provides a typical scenario related to introduction during the
                        given
                        phase.
                
  This listing shows possible areas for which the given
                        weakness could appear. These
                        may be for specific named Languages, Operating Systems, Architectures, Paradigms,
                        Technologies,
                        or a class of such platforms. The platform is listed along with how frequently the given
                        weakness appears for that instance.
                
 Example 1 This example attempts to write user messages to a message file and allow users to view them. (bad code) 
                                
                                    
                                    Example Language: PHP 
                                    
                                 
                            $MessageFile = "messages.out"; 
               
                            if ($_GET["action"] == "NewMessage") { $name = $_GET["name"]; }$message = $_GET["message"]; $handle = fopen($MessageFile, "a+"); fwrite($handle, "<b>$name</b> says '$message'<hr>\n"); fclose($handle); echo "Message Saved!<p>\n"; else if ($_GET["action"] == "ViewMessages") { include($MessageFile); }While the programmer intends for the MessageFile to only include data, an attacker can provide a message such as: (attack code) 
                                name=h4x0r 
               
                            message=%3C?php%20system(%22/bin/ls%20-l%22);?%3E which will decode to the following: (attack code) 
                                <?php system("/bin/ls -l");?> 
               
                            The programmer thought they were just including the contents of a regular data file, but PHP parsed it and executed the code. Now, this code is executed any time people view messages. Notice that XSS (CWE-79) is also possible in this situation. Example 2 edit-config.pl: This CGI script is used to modify settings in a configuration file. (bad code) 
                                
                                    
                                    Example Language: Perl 
                                    
                                 
                            use CGI qw(:standard); 
               
                            sub config_file_add_key { my ($fname, $key, $arg) = @_; 
                     # code to add a field/key to a file goes here sub config_file_set_key { my ($fname, $key, $arg) = @_; 
                     # code to set key to a particular file goes here sub config_file_delete_key { my ($fname, $key, $arg) = @_; 
                     # code to delete key from a particular file goes here sub handleConfigAction { my ($fname, $action) = @_; 
                     my $key = param('key'); my $val = param('val'); # this is super-efficient code, especially if you have to invoke # any one of dozens of different functions! my $code = "config_file_$action_key(\$fname, \$key, \$val);"; eval($code); $configfile = "/home/cwe/config.txt"; print header; if (defined(param('action'))) { handleConfigAction($configfile, param('action')); }else { print "No action specified!\n"; }The script intends to take the 'action' parameter and invoke one of a variety of functions based on the value of that parameter - config_file_add_key(), config_file_set_key(), or config_file_delete_key(). It could set up a conditional to invoke each function separately, but eval() is a powerful way of doing the same thing in fewer lines of code, especially when a large number of functions or variables are involved. Unfortunately, in this case, the attacker can provide other values in the action parameter, such as: (attack code) 
                                add_key(",","); system("/bin/ls"); 
               
                            This would produce the following string in handleConfigAction(): (result) 
                                config_file_add_key(",","); system("/bin/ls"); 
               
                            Any arbitrary Perl code could be added after the attacker has "closed off" the construction of the original function call, in order to prevent parsing errors from causing the malicious eval() to fail before the attacker's payload is activated. This particular manipulation would fail after the system() call, because the "_key(\$fname, \$key, \$val)" portion of the string would cause an error, but this is irrelevant to the attack because the payload has already been activated. Example 3 This simple script asks a user to supply a list of numbers as input and adds them together. (bad code) 
                                
                                    
                                    Example Language: Python 
                                    
                                 
                            
                  def main(): 
              
                            
                    sum = 0 
                  main()
                numbers = eval(input("Enter a space-separated list of numbers: ")) for num in numbers: 
                      sum = sum + num 
                    print(f"Sum of {numbers} = {sum}")
                  The eval() function can take the user-supplied list and convert it into a Python list object, therefore allowing the programmer to use list comprehension methods to work with the data. However, if code is supplied to the eval() function, it will execute that code. For example, a malicious user could supply the following string: (attack code) 
                                __import__('subprocess').getoutput('rm -r *') 
              
                            This would delete all the files in the current directory. For this reason, it is not recommended to use eval() with untrusted input. A way to accomplish this without the use of eval() is to apply an integer conversion on the input within a try/except block. If the user-supplied input is not numeric, this will raise a ValueError. By avoiding eval(), there is no opportunity for the input string to be executed as code. (good code) 
                                
                                    
                                    Example Language: Python 
                                    
                                 
                            
                  def main(): 
              
                            
                    sum = 0 
                  main()
                numbers = input("Enter a space-separated list of numbers: ").split(" ") try: 
                      for num in numbers: 
                    except ValueError:
                        sum = sum + int(num) 
                      print(f"Sum of {numbers} = {sum}")
                    
                      print("Error: invalid input") 
                  An alternative, commonly-cited mitigation for this kind of weakness is to use the ast.literal_eval() function, since it is intentionally designed to avoid executing code. However, an adversary could still cause excessive memory or stack consumption via deeply nested structures [REF-1372], so the python documentation discourages use of ast.literal_eval() on untrusted data [REF-1373]. Note: this is a curated list of examples for users to understand the variety of ways in which this weakness can be introduced. It is not a complete list of all CVEs that are related to this CWE entry. 
 
  This MemberOf Relationships table shows additional CWE Categories and Views that
                                reference this weakness as a member. This information is often useful in understanding where a
                                weakness fits within the context of external information sources.
                        
 
 Theoretical Injection problems encompass a wide variety of issues -- all mitigated in very different ways. For this reason, the most effective way to discuss these weaknesses is to note the distinct features that classify them as injection weaknesses. The most important issue to note is that all injection problems share one thing in common -- i.e., they allow for the injection of control plane data into the user-controlled data plane. This means that the execution of the process may be altered by sending code in through legitimate data channels, using no other mechanism. While buffer overflows, and many other flaws, involve the use of some further issue to gain execution, injection problems need only for the data to be parsed. The most classic instantiations of this category of weakness are SQL injection and format string vulnerabilities. 
 
 More information is available — Please edit the custom filter or select a different filter.  | 
	
  
| 
          
           Use of the Common Weakness Enumeration (CWE™) and the associated references from this website are subject to the Terms of Use. CWE is sponsored by the U.S. Department of Homeland Security (DHS) Cybersecurity and Infrastructure Security Agency (CISA) and managed by the Homeland Security Systems Engineering and Development Institute (HSSEDI) which is operated by The MITRE Corporation (MITRE). Copyright © 2006–2025, The MITRE Corporation. CWE, CWSS, CWRAF, and the CWE logo are trademarks of The MITRE Corporation.  | 
        ||
	                
