CWE-688 Variant Draft

Function Call With Incorrect Variable or Reference as Argument

This vulnerability occurs when a function is called with the wrong variable or reference passed as an argument. This simple coding mistake can cause the program to behave unpredictably, access…

Definition

What is CWE-688?

This vulnerability occurs when a function is called with the wrong variable or reference passed as an argument. This simple coding mistake can cause the program to behave unpredictably, access incorrect data, or trigger other security flaws.
At its core, this weakness is a straightforward logic error where a developer accidentally passes an unintended variable to a function. Think of it like giving a shipping clerk the wrong address label—the package (data) gets processed, but it goes to the wrong destination (function parameter), leading to corrupted states, incorrect calculations, or exposure of sensitive information. This often happens during code maintenance, when using similar-looking variable names, or when function signatures change. For developers, prevention hinges on code clarity and rigorous review. Use descriptive, distinct variable names to avoid confusion. Implement static analysis tools that can flag potential argument mismatches, especially after refactoring. Always double-check function calls when modifying related code, as this flaw is easy to introduce but can be difficult to trace during debugging when it manifests far from the original error.
Real-world impact

Real-world CVEs caused by CWE-688

  • Kernel code specifies the wrong variable in first argument, leading to resultant NULL pointer dereference.

How attackers exploit it

Step-by-step attacker path

  1. 1

    Identify a code path that handles untrusted input without validation.

  2. 2

    Craft a payload that exercises the unsafe behavior — injection, traversal, overflow, or logic abuse.

  3. 3

    Deliver the payload through a normal request and observe the application's reaction.

  4. 4

    Iterate until the response leaks data, executes attacker code, or escalates privileges.

Vulnerable code example

Vulnerable Java

In the following Java snippet, the accessGranted() method is accidentally called with the static ADMIN_ROLES array rather than the user roles.

Vulnerable Java
private static final String[] ADMIN_ROLES = ...;
  public boolean void accessGranted(String resource, String user) {
  	String[] userRoles = getUserRoles(user);
  	return accessGranted(resource, ADMIN_ROLES);
  }
  private boolean void accessGranted(String resource, String[] userRoles) {
```
// grant or deny access based on user roles* 
  		...}
Secure code example

Secure pseudo

Secure pseudo
// Validate, sanitize, or use a safe API before reaching the sink.
function handleRequest(input) {
  const safe = validateAndEscape(input);
  return executeWithGuards(safe);
}
What changed: the unsafe sink is replaced (or the input is validated/escaped) so the same payload no longer triggers the weakness.
Prevention checklist

How to prevent CWE-688

  • Testing Because this function call often produces incorrect behavior it will usually be detected during testing or normal operation of the product. During testing exercise all possible control paths will typically expose this weakness except in rare cases when the incorrect function call accidentally produces the correct results or if the provided argument type is very similar to the expected argument type.
Detection signals

How to detect CWE-688

Other

While this weakness might be caught by the compiler in some languages, it can occur more frequently in cases in which the called function accepts variable numbers of arguments, such as format strings in C. It also can occur in loosely typed languages or environments. This might require an understanding of intended program behavior or design to determine whether the value is incorrect.

Plexicus auto-fix

Plexicus auto-detects CWE-688 and opens a fix PR in under 60 seconds.

Codex Remedium scans every commit, identifies this exact weakness, and ships a reviewer-ready pull request with the patch. No tickets. No hand-offs.

Frequently asked questions

Frequently asked questions

What is CWE-688?

This vulnerability occurs when a function is called with the wrong variable or reference passed as an argument. This simple coding mistake can cause the program to behave unpredictably, access incorrect data, or trigger other security flaws.

How serious is CWE-688?

MITRE has not published a likelihood-of-exploit rating for this weakness. Treat it as medium-impact until your threat model proves otherwise.

What languages or platforms are affected by CWE-688?

MITRE lists the following affected platforms: C, Perl.

How can I prevent CWE-688?

Because this function call often produces incorrect behavior it will usually be detected during testing or normal operation of the product. During testing exercise all possible control paths will typically expose this weakness except in rare cases when the incorrect function call accidentally produces the correct results or if the provided argument type is very similar to the expected argument type.

How does Plexicus detect and fix CWE-688?

Plexicus's SAST engine matches the data-flow signature for CWE-688 on every commit. When a match is found, our Codex Remedium agent opens a fix PR with the corrected code, tests, and a one-line summary for the reviewer.

Where can I learn more about CWE-688?

MITRE publishes the canonical definition at https://cwe.mitre.org/data/definitions/688.html. You can also reference OWASP and NIST documentation for adjacent guidance.

Ready when you are

Don't Let Security
Weigh You Down.

Stop choosing between AI velocity and security debt. Plexicus is the only platform that runs Vibe Coding Security and ASPM in parallel — one workflow, every codebase.