SQ18102
Detected Linux executable files that declare some writable segments as executable, making non-executable memory mitigations less effective.
priority | CI/CD status | severity | effort | SAFE level | SAFE assessment |
---|---|---|---|---|---|
pass | high | medium | None | hardening: warning Reason: ineffective mitigations detected |
About the issueโ
The GNU linker allows overriding its default behavior with linker scripts. This is often done in builds where the developer needs a greater amount of control over the linking process. Upon linking, default segment flags are set based on the sections. However, in linker scripts, this can be overridden via the FLAGS parameter, which allows the user to manually specify the flags for each segment. This is prevalent in automatically generated or misconfigured linker scripts. Explicitly marking the segments as both writable and executable will cause protection mitigations to become less effective, and possibly increase the chance of arbitrary code execution attacks.
How to resolve the issueโ
- On some architectures, a read permission on a segment implies the segment is executable as well, so you should avoid declaring segments as both readable and writable.
- Disallow execution on writable memory segments.
Incidence statisticsโ
ReversingLabs periodically collects and analyzes the contents of popular software package repositories for threat research purposes. Analysis results are used to calculate incidence statistics for issues (policy violations) that Spectra Assure can detect in software packages.
This section is updated when new data becomes available.
Total amount of packages analyzed
- RubyGems: 183K
- Nuget: 644K
- PyPi: 628K
- NPM: 3.72M
Total detections per repository
For every repository, the chart shows the number of packages that triggered the software assurance policy. In other words, it shows how many packages in each package repository were found to have the specific issue described on this page. This information helps you understand how common the issue is across different software communities.
If a repository is absent from the chart, that means none of the packages in that repository triggered this policy during analysis, or the policy was not used during analysis.
Distribution of total detections by project popularity
For every repository, the chart shows how many of the total detections belong to the Top 100 (1-100), Top 1000 (101-1000) and Top 10 000 (1001-10 000) most downloaded projects. This information helps you understand the impact of the issue within each community, making it clearer when the issue affects the most popular projects.
If the chart shows zero values for all of the top project groups, that means all detections were in unranked projects (lower than 10 000 on the list of most downloaded projects).
Recommended readingโ
- From Zero to main(): Demystifying Firmware Linker Scripts (External resource - Interrupt)
- Data Execution Prevention (External resource - Microsoft)