<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcus Morris</title>
    <description>The latest articles on DEV Community by Marcus Morris (@ceaz).</description>
    <link>https://dev.to/ceaz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3973303%2F5df49f90-96ea-48d3-a87c-13f8cf4774fc.png</url>
      <title>DEV Community: Marcus Morris</title>
      <link>https://dev.to/ceaz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ceaz"/>
    <language>en</language>
    <item>
      <title>Software Artifact Trust Starts At Package Registries</title>
      <dc:creator>Marcus Morris</dc:creator>
      <pubDate>Wed, 16 Sep 2026 23:58:59 +0000</pubDate>
      <link>https://dev.to/ceaz/software-artifact-trust-starts-at-package-registries-4bk2</link>
      <guid>https://dev.to/ceaz/software-artifact-trust-starts-at-package-registries-4bk2</guid>
      <description>&lt;h2&gt;
  
  
  Which software artifact should we trust?
&lt;/h2&gt;

&lt;p&gt;Software package registries are open to the public, they essentially allow anyone really to share there libraries and code. I was curious about how to these packages could be vetted, inspected and triaged before ingesting/consuming. &lt;/p&gt;

&lt;p&gt;Many times we just type...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; -&amp;gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;our fav package&amp;gt;
OR
 -&amp;gt; uv &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;our other fav package&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This works most times and allows us to use our favorite packages from PyPI. There is a danger to be weary of, that of typosquatting, developer account take over and ultimately the publisher of the package not following OSS or PyPI best practices. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Even the most used python packages could be a risk, so to address this pre-ingestion issue, I created a tool that allows for me to triage and inspect package metadata and provenance evidence before downloading the package.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Learned:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;PyPI is a great source for evidence of attestation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Author or Maintainer Information can usually readily be found.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;License of the package is also listed, helpful before building with varied license restrictions/liberties.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SHA is explicitly listed and verifiable with packages you plan to build with. Allowing the practice of SHA pinning to persist. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open Source Security starts way left, at the package registry layer. All compromised cannot be caught here, but this practice can enhance OSS significantly. Inspecting packages at source.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;I look forward to iterating on this tool more and more in the very near future to enhance supply chain security and my own efforts to contribute to open source security initiatives. &lt;/p&gt;

&lt;p&gt;What tools do you like to use to inspect and vet open sources packages at the registry level?&lt;/p&gt;

&lt;p&gt;Link to Baro Tool&lt;br&gt;
&lt;a href="https://github.com/ceaz-sec/baro" rel="noopener noreferrer"&gt;https://github.com/ceaz-sec/baro&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example Triage Reports:&lt;br&gt;
&lt;a href="https://github.com/ceaz-sec/baro/tree/main/src/reports" rel="noopener noreferrer"&gt;https://github.com/ceaz-sec/baro/tree/main/src/reports&lt;/a&gt;&lt;/p&gt;

</description>
      <category>supplychainsecurity</category>
      <category>opensource</category>
      <category>appsec</category>
      <category>python</category>
    </item>
    <item>
      <title>Where does build integrity begin?</title>
      <dc:creator>Marcus Morris</dc:creator>
      <pubDate>Thu, 20 Aug 2026 00:00:42 +0000</pubDate>
      <link>https://dev.to/ceaz/where-does-build-integrity-begin-3mal</link>
      <guid>https://dev.to/ceaz/where-does-build-integrity-begin-3mal</guid>
      <description>&lt;p&gt;Software Product companies have to choose what materials to build their software with. Pypi, NuGet, Node, Crates, so many options abound.&lt;/p&gt;




&lt;p&gt;With each decision it is wise to integrate build integrity in the very beginning.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  What is build integrity?
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Build integrity is the assurance that the software assembled and delivered to production is the software the team intended to build.&lt;br&gt;
We do it everyday with physical products...&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When we go shopping for groceries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shopping for clothing online or in-person.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decide on build materials such as paint, wood or pipe for a DIY project.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Oftentimes due to familiarity and success with a product in the past we buy or use these materials without a second thought.&lt;/p&gt;

&lt;p&gt;Until....&lt;/p&gt;

&lt;p&gt;We are hit with a recall notice online or in the news about an item we purchased!!&lt;/p&gt;




&lt;p&gt;For Software Security this is just as important. Malware and vulnerabilities can drastically damage a company overnight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insightful Statistics on this issue:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;454,648 new malicious packages last year found.&lt;/li&gt;
&lt;li&gt;56% of recorded malicious packages were classified as “repository abuse”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Source: Sonatype SSSC Report&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answers to the following questions should be verified before a product is downloaded:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where did this product come from?&lt;/li&gt;
&lt;li&gt;Has the source or repo established a reputation of quality products?&lt;/li&gt;
&lt;li&gt;What reasons do we have to trust the manufacture of this product?&lt;/li&gt;
&lt;li&gt;Can we cryptographically prove our reasons for trust?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenSSF Scorecard and manual repository research help answer these questions.&lt;/p&gt;

&lt;p&gt;The hackers are really not the biggest threat, it is the quality of the product that we build with that is the greatest threat vector.&lt;/p&gt;

&lt;p&gt;How does your team currently verify build integrity?&lt;/p&gt;

</description>
      <category>containers</category>
      <category>cybersecurity</category>
      <category>softwareengineering</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Go-go Gadget...OSV!</title>
      <dc:creator>Marcus Morris</dc:creator>
      <pubDate>Tue, 07 Jul 2026 15:46:23 +0000</pubDate>
      <link>https://dev.to/ceaz/go-go-gadget-2oc6</link>
      <guid>https://dev.to/ceaz/go-go-gadget-2oc6</guid>
      <description>&lt;p&gt;Are you looking for vulnerability intel that standard scanners skip?&lt;/p&gt;

&lt;p&gt;OSV-Scanner is an awesome SCA tool for unearthing vulnerabilities in open-source dependencies, offering you a unique lens on your supply chain.&lt;/p&gt;




&lt;p&gt;OSV-scanner has nice flexibility in how you consume the data:&lt;/p&gt;

&lt;p&gt;Served locally via port 8000: Clean view of data in a web UI interface&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;osv-scanner scan image &lt;span class="nt"&gt;--serve&lt;/span&gt; &amp;lt;image&amp;gt;/latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Standard terminal output: Great for a quick test or audit, can be piped into other tools/reports.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;osv-scanner scan image &amp;lt;image&amp;gt;/latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Either way, it's a welcomed addition to any supply chain security engineers tool-belt. &lt;/p&gt;

&lt;p&gt;Just say Go-go Gadget OSV! 🕵️&lt;/p&gt;

</description>
      <category>vulnerabilities</category>
      <category>cybersecurity</category>
      <category>supplychainsecurity</category>
      <category>containers</category>
    </item>
    <item>
      <title>A Simple Way to Reduce the Grype Noise</title>
      <dc:creator>Marcus Morris</dc:creator>
      <pubDate>Tue, 30 Jun 2026 18:56:02 +0000</pubDate>
      <link>https://dev.to/ceaz/a-simple-way-to-reduce-the-grype-noise-5gbm</link>
      <guid>https://dev.to/ceaz/a-simple-way-to-reduce-the-grype-noise-5gbm</guid>
      <description>&lt;p&gt;Security Team: “I have a major Grype...with what I Syfted out of your provided image."&lt;/p&gt;

&lt;p&gt;Developer: “Well your Grype is slowing me down...let’s tone it down a notch.”&lt;/p&gt;




&lt;p&gt;While deploying bookstack into my local environment, this issue surfaced. It is true for many organizations today deploying images and packages in their environment. &lt;/p&gt;

&lt;p&gt;How can this noise fatigue in the software supply chain be remedied?&lt;/p&gt;

&lt;p&gt;Add a .gype.yaml file to the root directory of your project. This will allow grype to ignore certain CVE's that do not execute or pose a threat in your environment.&lt;/p&gt;




&lt;p&gt;The yaml config can be as simple as below: Linux Environment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# grype.yaml&lt;/span&gt;
&lt;span class="na"&gt;ignore&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;vulnerability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CVE-2026-32631&lt;/span&gt;
  &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Platform-specific&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;false&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;positive.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Git&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Windows&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;only;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;applicable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;this&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Linux-based&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;image."&lt;/span&gt;

 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;vulnerability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CVE-2016-2781&lt;/span&gt;
  &lt;span class="na"&gt;reason&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Chroot&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;escape&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;via&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ioctl.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Containers&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rely&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;namespaces/cgroups,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;chroot,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;so&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;this&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;path&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;isn't&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;exploitable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;here."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OR&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# grype.yaml&lt;/span&gt;
&lt;span class="na"&gt;ignore&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;vulnerability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CVE-2026-32631&lt;/span&gt;
 &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;vulnerability&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CVE-2016-2781&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;This will help developers and security engineers get along better. 😃&lt;/p&gt;

&lt;p&gt;Grype config reference:&lt;br&gt;
&lt;a href="https://oss.anchore.com/docs/reference/grype/configuration/" rel="noopener noreferrer"&gt;https://oss.anchore.com/docs/reference/grype/configuration/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>softwareengineering</category>
      <category>cybersecurity</category>
      <category>grype</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Open source is like an amazing community swimming pool. 🏊‍♂️</title>
      <dc:creator>Marcus Morris</dc:creator>
      <pubDate>Tue, 30 Jun 2026 16:20:35 +0000</pubDate>
      <link>https://dev.to/ceaz/open-source-is-like-an-amazing-community-swimming-pool-2ogl</link>
      <guid>https://dev.to/ceaz/open-source-is-like-an-amazing-community-swimming-pool-2ogl</guid>
      <description>&lt;p&gt;It’s collaborative, it’s highly efficient, and everyone is having a great time building incredible things together.&lt;/p&gt;

&lt;p&gt;Until someone whizzes in the water.&lt;/p&gt;

&lt;p&gt;We’ve all seen or heard of the childhood "indicator dye" that turns bright blue the exact moment someone contaminates the pool. In the real world of software engineering, public registries (like npm or PyPI) don't have that dye built-in. &lt;/p&gt;

&lt;p&gt;Malicious dependencies, typosquatting, and compromised upstream maintainers blend right into the clean water almost perfectly, undetected. If we treat a raw, unverified public registry like a trusted "community pool" environment, your production pipelines will be contaminated with background risk.&lt;/p&gt;

&lt;p&gt;How do we actually build a sterile "pool experience" in enterprise software supply chains? We add in our own indicator dye and filtration systems:&lt;/p&gt;

&lt;p&gt;The Indicator Dye (Visibility): Generating an granular Software Bill of Materials (SBOM) using tools like Syft, paired with continuous vulnerability scanning via Grype, acts as your indicator dye. It instantly exposes hidden, contaminated layers before they compromise your ecosystem. Vexctl (OpenVex) can help quiet the noise of CVE's that your company is not at risk to, reducing alert fatigue in the process.&lt;/p&gt;

&lt;p&gt;The Guest Log (Provenance &amp;amp; Attestation): Stop pulling anonymous binaries. Provenance tells you the exact cryptographic history of where and how the software was built. Attestations prove that it met your rigorous build-time security requirements before it ever left the assembly line.&lt;/p&gt;

&lt;p&gt;The Filtration System (Digital Signing &amp;amp; Policy): Cryptographic signing (via frameworks like Sigstore) ensures that if an artifact or container image isn't explicitly signed, verified, and matched against your governance policies, it never gets near your cluster.&lt;/p&gt;

&lt;p&gt;Open source is a beautiful ecosystem, but public registries are distribution mechanisms, not always safe places to swim.&lt;/p&gt;

&lt;p&gt;Do not swim blindly out there. Shift upstream to the binaries first, verify your provenance, and build a closed-loop system for your dependencies. Consider solutions like Chainguard and methods to secure images/artifacts at build.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>software</category>
      <category>cybersecurity</category>
      <category>cicd</category>
    </item>
  </channel>
</rss>
