Fri. Aug 14th, 2020

5 Ways to Find and Fix Open Source Vulnerabilities

6 min read
Image: Pixabay

Open source components are quite useful in building and updating applications. Instead of doing everything from scratch, you save time by using public resources. However, there are some unique security issues that should be addressed when dealing with open source.

This article examines open source security risks related to the publicity of exploits, zero-day attacks, the difficulty of managing licensing, and developer malpractices. You will also learn about five unique methods you can use to find and fix open source vulnerabilities.

Open Source Security Risks You Should Know About

To find and mitigate vulnerabilities requires first understanding of the specific risks that come with open source components. The community-based development of these components and the public nature code present issues that are not a concern with proprietary software.

Publicity of exploits

When vulnerabilities are found in open source software, this information is typically reported by the finder to a public vulnerability database. For example, MITRE’s Common Vulnerabilities and Exposures (CVE) database or the National Vulnerability Database (NVD). While there is a grace period between reporting and making the information publicly available, everything needed for exploitation is exposed.

If you do not make efforts to patch vulnerabilities as soon as fixes are made available, you are leaving yourself vulnerable to easy attacks. This means it is your responsibility to actively keep track of vulnerabilities when announced. It also means you should track feeds of releases for your various components.

Zero-day attacks

Also related to the public availability of code is the risk of zero day attacks. These attacks occur when attackers exploit unknown or unidentified vulnerabilities that they may be able to find by testing or evaluating source code. Zero-day attacks, by definition, do not have patches available which make these attacks hard to identify or stop until damage has been done.

To protect yourself against zero-day attacks your best option is to adopt security tooling with behavioral detection capabilities. These capabilities can help you identify attacks without requiring a known pattern or signature. Instead, suspicious activity is detected when events stray from the expected pattern of behavior.

Difficulty managing licenses

While not a traditional vulnerability licensing can pose a significant risk when using open source components. Using components off-license can lead to legal repercussions, including fines, an inability to distribute products, or requirements to make your projects open source.

This is not an issue as long as you are careful about which licenses you include. However, tracking license requirements can be a challenge. To ensure that you are complying with license restrictions you need to be aware of exactly which components you’re using, what licenses apply to those components, and how licensing between components may conflict.

It also requires ensuring that components don’t creep from one workflow to another. For example, using a component for internal monitoring may be fine while including it for monitoring in a product is not allowed.

Developer malpractices

Poor developer practices are another risk to watch for, including copying and pasting code from external sources and not documenting inclusions. When code is copy-pasted it is no longer supported by ongoing project development and any vulnerabilities present are transferred over. When code is included without proper documentation you cannot track licensing or ensure that components are up to date.

Preventing these issues requires strictly defining how components can be used, what the approval process for components is, and how components are tracked. Enforcing these policies helps you ensure that you are aware of any components that are included. It also enables you to vet components for security and reliability before inclusion.

5 Ways to Find and Fix Open Source Vulnerabilities

Once you are aware of the general risks you face, you should begin focusing on finding any vulnerabilities currently in your system. Once these vulnerabilities are identified, you take preventative action to protect your systems and products.

  1. Identify all open source components

Your first step should be to identify any open source components that you are currently using. This includes standalone tools, components included in your products, and those included in proprietary tools you are using. The fastest way to do this is with the help of software composition analysis (SCA) tools.

Once you are aware of what components you have, you should create an inventory listing the component, the version, and licensing. This inventory can then be used to ensure that licensing is in compliance, versions are standardized, and to quickly identify systems or applications that may be vulnerable.

  1. Become familiar with CVSS

The Common Vulnerability Scoring System (CVSS) is a system created to help security professionals understand and evaluate vulnerabilities. Understanding how the system works can help you prioritize which vulnerabilities to focus on and accurately assess how issues may affect your systems.

Understanding CVSS can help you interpret vulnerability information more easily. The methods used to determine severity can also be used to thoroughly evaluate your own systems and products. This can help you determine where you might be vulnerable and understand which measures can most effectively negate possible harm.

  1. Use Automation

As much as possible, try to automate your policies and workflows when it comes to open source vulnerability management. This can help you ensure that components are managed consistently and that vulnerabilities or patches are not overlooked.

Automation to implement includes monitoring of vulnerability databases, open-source forums, and threat intelligence feeds. Setting automated alerts any time a component you are using is mentioned can help you ensure patches or notices aren’t overlooked.

Another type of automation to consider is the use of static application security testing (SAST) and dynamic application security testing (DAST) solutions. These solutions enable you to test and verify the security of components before those components are included. These solutions can be added to screening processes in place of manual testing.

  1. Keep systems up to date

Regardless of whether patches are available, you should make sure to keep your systems up to date at all times. Ideally, you should also be using the latest version of software whenever possible. This can help you ensure that legacy vulnerabilities do not put your system at risk.

Remaining up to date can also help you ensure that support for the components and tools you are using remains active. Even if a version is still available, waiting until support is dropped to update can create delays and open vulnerabilities during the switch.

  1. Educate employees

While vulnerabilities and insecure code may seem obvious to security professionals, it often isn’t for non-security staff. These employees may be completely unaware of the risks of using open source components or of best practices for ensuring that code is secure.

When educating your staff, make sure to explain why security policies are in place and what the risks are if those policies are not followed. Additionally, ensure that you are telling staff what they can do to work securely rather than just what they can’t. This can ensure that productivity isn’t affected.

Conclusion

Like any other software component, open-source code is vulnerable to poor development practices and misconfiguration. The publicity of exploits is also a factor that impacts both proprietary and open-source software. The main difference here is whether you are a user or a contributor/creator.

Creators are required to discover, fix, and disclose vulnerabilities as soon as found. Users are responsible for updating systems to ensure they are using the patched version of the software or applying the patch to their codebase.

However, it can still be argued that there are unique characteristics of open source which make these components especially vulnerable. The public nature of the open-source, in particular, makes these components vulnerable.

Unlike proprietary software, anyone can gain access to open source libraries, learn how this code works, and then create unique zero-day attacks. This means that as soon as a patch is released, you need to apply it to your system.

To ensure you can apply patches in a timely manner, you need to continually keep track of all components, licensing, as well as monitor vulnerabilities databases. To save time, you can use automation, but these tools do not replace training—your staff should be educated in CVSS as well as security standards.