JavaScript is not currently enabled, but is required for full CodeSonar manual search and browse functionality.

If you are viewing this file in your hub's Web GUI, enable JavaScript in your browser: you will also need it for GUI functionality.

If you opened this file directly from disk, your browser may be directly suppressing JavaScript functionality: certain browsers perform this suppression on local files (but not files delivered by web servers) for security reasons.

CodeSonar® 9.2p0 CONFIDENTIAL CodeSecure Inc
C and C++


MISC.PRIVILEGE : Incorrect Privilege Assignment

Summary

FIXME

Properties

Class Name Incorrect Privilege Assignment
Significance security
Mnemonic MISC.PRIVILEGE
Categories
CWE CWE:266 Incorrect Privilege Assignment
  CWE:271 Privilege Dropping / Lowering Errors
  CWE:648 Incorrect Use of Privileged APIs
CERT-C CERT-C:POS36-C Observe correct revocation order while relinquishing privileges
  CERT-C:POS37-C Ensure that privilege relinquishment is successful
OWASP-2021 OWASP-2021:A4 Insecure design
OWASP-2025 OWASP-2025:A06 Insecure Design
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default. To enable them, add the following WARNING_FILTER rule to the project configuration file.
WARNING_FILTER += allow class="Incorrect Privilege Assignment"

Example

#include <unistd.h>
#include <assert.h>

int incorrect_privilege_assignment(void)
{
    /* Assert that we're running as root, because that's the context. */
    assert(geteuid() == 0);

    /* Set the effective uid to the real uid */
    (void) setuid(getuid());

    /* If the effective uid is non-zero then the following will fail
       to set the saved gid, which erroneously allows gid privileges
       to be restored later */
    (void) setgid(getgid()); /* 'Incorrect Privilege Assignment' warning issued here */
    return 0;
}

void correct_privilege_assignment(void)
{
    /* Assert that we're running as root, because that's the context. */
    assert(geteuid() == 0);

    /* Fully relinquish gid privileges first while the effective
       uid is still zero. */
    (void) setgid(getgid());

    (void) setuid(getuid()); /* No warning issued here */
}

extern int dummy(void);
int main(int argc, char *argv[])
{
    if (dummy())
        incorrect_privilege_assignment();
    else
        correct_privilege_assignment();
    return 0;
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.

 

To report problems with this documentation, please visit https://support.codesecure.com/.