Description
The product contains an expression that will always evaluate to false.
Potential Impact
Other
Quality Degradation, Varies by Context
Demonstrative Examples
public void updateUserAccountOrder(String productNumber, String accountNumber) {
boolean isValidProduct = false;boolean isValidAccount = false;
if (validProductNumber(productNumber)) {isValidProduct = true;updateInventory(productNumber);}else {return;}
if (validAccountNumber(accountNumber)) {isValidProduct = true;updateAccount(accountNumber, productNumber);}
if (isValidProduct && isValidAccount) {updateAccountOrder(accountNumber, productNumber);}
}...if (validAccountNumber(accountNumber)) {isValidAccount = true;updateAccount(accountNumber, productNumber);}...#define BIT_READ 0x0001 // 00000001#define BIT_WRITE 0x0010 // 00010000
unsigned int mask = BIT_READ & BIT_WRITE; /* intended to use "|" */
// using "&", mask = 00000000// using "|", mask = 00010001
// determine if user has read and write accessint hasReadWriteAccess(unsigned int userMask) {
// if the userMask has read and write bits set// then return 1 (true)if (userMask & mask) {return 1;}
// otherwise return 0 (false)return 0;
}int updateInventory(char* productNumber, int numberOfItems) {
int initCount = getProductCount(productNumber);
int updatedCount = initCount + numberOfItems;
int updated = updateProductCount(updatedCount);
// if statement for debugging purposes onlyif (1 == 0) {
char productName[128];productName = getProductName(productNumber);
printf("product %s initially has %d items in inventory \n", productName, initCount);printf("adding %d items to inventory for %s \n", numberOfItems, productName);
if (updated == 0) {printf("Inventory updated for product %s to %d items \n", productName, updatedCount);}
else {printf("Inventory not updated for product: %s \n", productName);}
}
return updated;
}Mitigations & Prevention
Consider refactoring the code, or determine if the code is not including a condition that could cause the expression to become false.
Detection Methods
- Automated Static Analysis High — Automated static analysis, commonly referred to as Static Application Security Testing (SAST), can find some instances of this weakness by analyzing source code (or binary/compiled code) without having to execute it. Typically, this is done by building a model of data flow and control flow, then sea
Related Weaknesses
Taxonomy Mappings
- CERT C Secure Coding: MSC00-C — Compile cleanly at high warning levels
- Software Fault Patterns: SFP1 — Glitch in computation
Frequently Asked Questions
What is CWE-570?
CWE-570 (Expression is Always False) is a software weakness identified by MITRE's Common Weakness Enumeration. It is classified as a Base-level weakness. The product contains an expression that will always evaluate to false.
How can CWE-570 be exploited?
Attackers can exploit CWE-570 (Expression is Always False) to quality degradation, varies by context. This weakness is typically introduced during the Implementation phase of software development.
How do I prevent CWE-570?
Key mitigations include: Consider refactoring the code, or determine if the code is not including a condition that could cause the expression to become false.
What is the severity of CWE-570?
CWE-570 is classified as a Base-level weakness (Medium abstraction). Its actual severity depends on the specific context and how the weakness manifests in your application.