/* TEMPLATE GENERATED TESTCASE FILE Filename: CWE90_LDAP_Injection__w32_wchar_t_environment_82a.cpp Label Definition File: CWE90_LDAP_Injection__w32.label.xml Template File: sources-sink-82a.tmpl.cpp */ /* * @description * CWE: 90 LDAP Injection * BadSource: environment Read input from an environment variable * GoodSource: Use a fixed string * Sinks: * BadSink : data concatenated into LDAP search, which could result in LDAP Injection * Flow Variant: 82 Data flow: data passed in a parameter to an virtual method called via a pointer * * */ #include "std_testcase.h" #include "CWE90_LDAP_Injection__w32_wchar_t_environment_82.h" #define ENV_VARIABLE L"ADD" #ifdef _WIN32 #define GETENV _wgetenv #else #define GETENV getenv #endif namespace CWE90_LDAP_Injection__w32_wchar_t_environment_82 { #ifndef OMITBAD void bad() { wchar_t * data; wchar_t dataBuffer[256] = L""; data = dataBuffer; { /* Append input from an environment variable to data */ size_t dataLen = wcslen(data); wchar_t * environment = GETENV(ENV_VARIABLE); /* If there is data in the environment variable */ if (environment != NULL) { /* POTENTIAL FLAW: Read data from an environment variable */ wcsncat(data+dataLen, environment, 256-dataLen-1); } } CWE90_LDAP_Injection__w32_wchar_t_environment_82_base* baseObject = new CWE90_LDAP_Injection__w32_wchar_t_environment_82_bad; baseObject->action(data); delete baseObject; } #endif /* OMITBAD */ #ifndef OMITGOOD /* goodG2B uses the GoodSource with the BadSink */ static void goodG2B() { wchar_t * data; wchar_t dataBuffer[256] = L""; data = dataBuffer; /* FIX: Use a fixed file name */ wcscat(data, L"Doe, XXXXX"); CWE90_LDAP_Injection__w32_wchar_t_environment_82_base* baseObject = new CWE90_LDAP_Injection__w32_wchar_t_environment_82_goodG2B; baseObject->action(data); delete baseObject; } void good() { goodG2B(); } #endif /* OMITGOOD */ } /* close namespace */ /* Below is the main(). It is only used when building this testcase on * its own for testing or for building a binary to use in testing binary * analysis tools. It is not used when compiling all the testcases as one * application, which is how source code analysis tools are tested. */ #ifdef INCLUDEMAIN using namespace CWE90_LDAP_Injection__w32_wchar_t_environment_82; /* so that we can use good and bad easily */ int main(int argc, char * argv[]) { /* seed randomness */ srand( (unsigned)time(NULL) ); #ifndef OMITGOOD printLine("Calling good()..."); good(); printLine("Finished good()"); #endif /* OMITGOOD */ #ifndef OMITBAD printLine("Calling bad()..."); bad(); printLine("Finished bad()"); #endif /* OMITBAD */ return 0; } #endif