The C Standard, 7.2729.3.1 [ISO/IEC 9899:20112024], provides the following sample implementation of the asctime() function:
...
These functions are included only for compatibility with older implementations. They have undefined behavior if the resulting string would be too long, so the use of these functions should be discouraged. On implementations that do not detect output string length overflow, it is possible to overflow the output buffers in such a way as to cause applications to fail, or possible system security violations. Also, these functions do not support localized date and time formats. To avoid these problems, applications should use
strftime()to generate strings from broken-down times.
The C Standard, Annex K, also defines asctime_s(), which can be used as a secure substitute for asctime().
The asctime() The asctime() function appears in the list of obsolescent functions in MSC24-C. Do not use deprecated or obsolescent functions.
...
This call has the same effects as asctime() but also ensures that no more than maxsize characters are printed, preventing buffer overflow.
Compliant Solution (asctime_s())
The C Standard, Annex K, defines the asctime_s() function, which serves as a close replacement for the asctime() function but requires an additional argument that specifies the maximum size of the resulting time string:
...
| bgColor | #ccccff |
|---|---|
| lang | c |
...
Risk Assessment
On implementations that do not detect output-string-length overflow, it is possible to overflow the output buffers.
Rule | Severity | Likelihood | Detectable |
|---|
Repairable | Priority | Level | |
|---|---|---|---|
MSC33-C | High | Likely | No |
No |
P9 |
L2 |
Automated Detection
Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Astrée |
| Supported, but no explicit checker | |||||||
| Axivion Bauhaus Suite |
| CertC-MSC33 | |||||||
| CodeSonar |
| BADFUNC.TIME_H | Use of <time.h> Time/Date Function | ||||||
| Cppcheck Premium |
| premium-cert-msc33-c | |||||||
| Helix QAC |
| C5032 C++5030 | |||||||
| Klocwork |
| CERT.MSC.ASCTIME | |||||||
| LDRA tool suite |
| 44 S | Enhanced Enforcement | ||||||
| Parasoft C/C++test |
| CERT_C-MSC33-a | The 'asctime()' and 'asctime_r()' functions should not be used | |||||||
| PC-lint Plus |
| 586 | Fully supported | ||||||
| Polyspace Bug Finder |
|
| CERT C: Rule MSC33-C | Checks for use |
| of obsolete standard function |
| (rule partially covered) | |||||||||
| RuleChecker |
| Supported, but no explicit checker |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
Key here (explains table format and definitions)
Taxonomy | Taxonomy item | Relationship |
|---|---|---|
| CERT C Secure Coding Standard | MSC24-C. Do not use deprecated or obsolescent functions | Prior to 2018-01-12: CERT: Unspecified Relationship |
Bibliography
| [IEEE Std 1003.1:2013] | XSH, System Interfaces, asctime |
| [ISO/IEC 9899: |
| 2024] | 7. |
29.3.1, "The asctime Function" |
...
...