CWE-212: Improper Removal of Sensitive Information Before Storage or Transfer

Description:
The product stores, transfers, or shares a resource that contains sensitive information, but it does not properly remove that information before the product makes the resource available to unauthorized actors.

Extended Description:
Resources that may contain sensitive data include documents, packets, messages, databases, etc. While this data may be useful to an individual user or small set of users who share the resource, it may need to be removed before the resource can be shared outside of the trusted group. The process of removal is sometimes called cleansing or scrubbing. 
             For example, a product for editing documents might not remove sensitive data such as reviewer comments or the local pathname where the document is stored. Or, a proxy might not remove an internal IP address from headers before making an outgoing request to an Internet site.

Affected languages: Not Language-Specific
Parent weaknesses: CWE-669, CWE-669

Consequences:
  - Confidentiality: Read Files or Directories

Detection methods:
  - Automated Static Analysis: Tools are available to analyze documents
			 (such as PDF, Word, etc.) to look for private information
			 such as names, addresses, etc.

Mitigations:
  - [Requirements] Clearly specify which information should be regarded as private or sensitive, and require that the product offers functionality that allows the user to cleanse the sensitive information from the resource before it is published or exported to other parties.
  - [Architecture and Design] Compartmentalize the system to have "safe" areas where trust boundaries can be unambiguously drawn. Do not allow sensitive data to go outside of the trust boundary and always be careful when interfacing with a compartment outside of the safe area. 
                   Ensure that appropriate compartm
  - [Implementation] Some tools can automatically analyze
		documents to redact, strip, or "sanitize" private
		information, although some human review might be
		necessary. Tools may vary in terms of which document
		formats can be processed. 
		 
		 
		  When calling an external program to automatically
		  generate o
  - [Implementation] Use naming conventions and strong types to make it easier to spot when sensitive data is being used. When creating structures, objects, or other complex entities, separate the sensitive and non-sensitive data as much as possible.

Demonstrative examples:
This code either generates a public HTML user information page or a JSON response containing the same user information.
The programmer is careful to not display the user's e-mail address when displaying the public HTML page. However, the e-mail address is not removed from the JSON response, exposing the user's e-mail address.
// API flag, output JSON if set 
                      $json = $_GET['json'] $username = $_GET['user'] if(!$json) { 
                         $record = getUserRecord($username); foreach($record as $fieldName => $fieldValue) { 
                               if($fieldName == "email_address") { 
                                     
                                        
                                        // skip displaying user emails 
                          

Real-world examples:
  - CVE-2023-1974: product does not remove EXIF data from images, which can include GPS coordinates
  - CVE-2020-26220: Customer relationship management (CRM) product does not strip Exif data from images
  - CVE-2019-3733: Cryptography library does not clear heap memory before release
  - CVE-2005-0406: Some image editors modify a JPEG image, but the original EXIF thumbnail image is left intact within the JPEG. (Also an interaction error).
  - CVE-2002-0704: NAT feature in firewall leaks internal IP addresses in ICMP error messages.