Write-what-where Condition |
Weakness ID: 123 (Weakness Base) | Status: Draft |
Description Summary
Scope | Effect |
---|---|
Access Control | Clearly, write-what-where conditions can be used to write data to areas of memory outside the scope of a policy. Also, they almost invariably can be used to execute arbitrary code, which is usually outside the scope of a program's implicit security policy. If the attacker can overwrite a pointer's worth of memory (usually 32 or 64 bits), he can redirect a function pointer to his own malicious code. Even when the attacker can only modify a single byte arbitrary code execution can be possible. Sometimes this is because the same problem can be exploited repeatedly to the same effect. Other times it is because the attacker can overwrite security-critical application-specific data -- such as a flag indicating whether the user is an administrator. |
Availability | Many memory accesses can lead to program termination, such as when writing to addresses that are invalid for the current process. |
Other | When the consequence is arbitrary code execution, this can often be used to subvert any other security service. |
Pre-design: Use a language that provides appropriate memory abstractions. |
Phase: Architecture and Design Integrate technologies that try to prevent the consequences of this problem. |
Phase: Implementation Take note of mitigations provided for other flaws in this taxonomy that lead to write-what-where conditions. |
Operational: Use OS-level preventative functionality integrated after the fact. Not a complete solution. |
Ordinality | Description |
---|---|
Resultant | (where the weakness is typically related to the presence of some other weaknesses) |
Nature | Type | ID | Name | View(s) this relationship pertains to![]() |
---|---|---|---|---|
ChildOf | ![]() | 119 | Failure to Constrain Operations within the Bounds of a Memory Buffer | Development Concepts (primary)699 Research Concepts (primary)1000 |
PeerOf | ![]() | 134 | Uncontrolled Format String | Research Concepts1000 |
CanFollow | ![]() | 120 | Buffer Copy without Checking Size of Input ('Classic Buffer Overflow') | Research Concepts1000 |
CanFollow | ![]() | 364 | Signal Handler Race Condition | Research Concepts1000 |
CanFollow | ![]() | 416 | Use After Free | Research Concepts1000 |
CanFollow | ![]() | 590 | Free of Memory not on the Heap | Research Concepts1000 |
PeerOf | ![]() | 415 | Double Free | Research Concepts1000 |
PeerOf | ![]() | 479 | Unsafe Function Call from a Signal Handler | Research Concepts1000 |
Submissions | ||||
---|---|---|---|---|
Submission Date | Submitter | Organization | Source | |
CLASP | Externally Mined | |||
Modifications | ||||
Modification Date | Modifier | Organization | Source | |
2008-07-01 | Eric Dalci | Cigital | External | |
updated Time of Introduction | ||||
2008-09-08 | CWE Content Team | MITRE | Internal | |
updated Applicable Platforms, Common Consequences, Relationships, Other Notes, Taxonomy Mappings, Weakness Ordinalities | ||||
2008-11-24 | CWE Content Team | MITRE | Internal | |
updated Common Consequences, Other Notes | ||||
2009-01-12 | CWE Content Team | MITRE | Internal | |
updated Common Consequences | ||||
2009-05-27 | CWE Content Team | MITRE | Internal | |
updated Relationships |