Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

It is also possible to search the environment for multiple entries of a variable. On POSIX systems, the environ variable can be used for this purpose. Any duplicate values are an indication of an attack; take appropriate action.

Compliant Solution (POSIX)

In this compliant solution, the environ array is manually searched for duplicate key entries.

Code Block
bgColor#ccccff

extern char ** environ;

int main(void) {
  if(multiple_vars_with_same_name()) {
    system_error("Someone may be tampering.\n");
    return 1;
  }

  /* ... */

  return 0;
}

int multiple_vars_with_same_name() {
  size_t i;
  size_t j;
  size_t k;
  size_t l;
  size_t len_i;
  size_t len_j;

  for(i = 0; environ[i] != NULL; i++) {
    for(j = i; environ[j] != NULL; j++) {
      if(i != j) {
        k = 0;
        l = 0;

        len_i = strlen(environ[i]);
        len_j = strlen(environ[j]);

        while(k < len_i && l < len_j) {
          if(environ[i][k] != environ[j][l])
            break;

          if(environ[i][k] == '=')
            return 1;

          k++;
          l++;
        }
      }
    }
  }
  return 0;
}

Risk Assessment

An adversary could create multiple environment variables with the same name. If the program checks one copy but uses another, security checks may be circumvented.

...