<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Cve on SRA Labs | Cybersecurity Research &amp; Innovation by Security Risk Advisors</title>
    <link>https://labs.sra.io/tags/cve/</link>
    <description>Recent content in Cve on SRA Labs | Cybersecurity Research &amp; Innovation by Security Risk Advisors</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 05 May 2026 12:00:00 +0000</lastBuildDate><atom:link href="https://labs.sra.io/tags/cve/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Cracking Codes, Capturing Credentials: Five CVEs in Milner ImageDirector Capture</title>
      <link>https://labs.sra.io/posts/milnerimagedirector-post/</link>
      <pubDate>Tue, 05 May 2026 12:00:00 +0000</pubDate>
      
      <guid>https://labs.sra.io/posts/milnerimagedirector-post/</guid>
      <description>&lt;h1 id=&#34;summary&#34;&gt;Summary&lt;/h1&gt;
&lt;p&gt;SRA encountered &lt;a href=&#34;https://milner.com/solutions/document-management/document-capture/&#34; target=&#34;_blank&#34;&gt;Milner ImageDirector Capture&lt;/a&gt;, a document scanning application, on a network penetration test. We identified and responsibly disclosed several vulnerabilities in this software. After the vendor provided a patch, we subsequently released &lt;a href=&#34;https://labs.sra.io/posts/milnerimagedirector/&#34; target=&#34;_blank&#34;&gt;five CVEs&lt;/a&gt;. This post explains the technical details of each CVE.&lt;/p&gt;
&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;ImageDirector Capture is a .NET Windows application that manages scanned documents. Users access Capture by logging into one or more endpoint devices. The endpoints store database credentials and authenticate to a central MSSQL database for storage. While individual users can add documents to the server, they should not be able to extract database credentials from the application. We audited Capture&amp;rsquo;s source code with dnSpy.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;summary&#34;&gt;Summary&lt;/h1&gt;
&lt;p&gt;SRA encountered &lt;a href=&#34;https://milner.com/solutions/document-management/document-capture/&#34; target=&#34;_blank&#34;&gt;Milner ImageDirector Capture&lt;/a&gt;, a document scanning application, on a network penetration test. We identified and responsibly disclosed several vulnerabilities in this software. After the vendor provided a patch, we subsequently released &lt;a href=&#34;https://labs.sra.io/posts/milnerimagedirector/&#34; target=&#34;_blank&#34;&gt;five CVEs&lt;/a&gt;. This post explains the technical details of each CVE.&lt;/p&gt;
&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;
&lt;p&gt;ImageDirector Capture is a .NET Windows application that manages scanned documents. Users access Capture by logging into one or more endpoint devices. The endpoints store database credentials and authenticate to a central MSSQL database for storage. While individual users can add documents to the server, they should not be able to extract database credentials from the application. We audited Capture&amp;rsquo;s source code with dnSpy.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: we used the sample credential &lt;code&gt;sa:password99&lt;/code&gt; for demonstration purposes.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&#34;spicy-bytes-hardcoded-encryption-key&#34;&gt;Spicy Bytes: Hardcoded Encryption Key&lt;/h1&gt;
&lt;p&gt;Capture uses stored credentials to connect to the database. It stores these credentials in &lt;code&gt;C:\ProgramData\Comsquared\Capture\Connections.config&lt;/code&gt;.

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;0_connectionsconfig.png&#34;  alt=&#34;Viewing encrypted credentials in Connections.config&#34;   style=&#34;border-radius: 8px;&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Viewing encrypted credentials in Connections.config&lt;/figcaption&gt;
    
  &lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;It protects these credentials with encryption, but the &lt;code&gt;GetPassword()&lt;/code&gt; and &lt;code&gt;SetPassword()&lt;/code&gt; functions in &lt;code&gt;C2SGlobalSettings.dll&lt;/code&gt; call the &lt;code&gt;Password.Decrypt()&lt;/code&gt; function with a hardcoded key.

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;1_hardcodedkey.png&#34;  alt=&#34;Observing hardcoded encryption keys in GetPassword and SetPassword functions&#34;   style=&#34;border-radius: 8px;&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Observing hardcoded encryption keys in GetPassword and SetPassword functions&lt;/figcaption&gt;
    
  &lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;Looking at the definition of &lt;code&gt;Password()&lt;/code&gt;, we see that the function defaults to a predefined key if it receives no input, and it uses the inline encryption key otherwise. We did not observe any instance where the application used this default key.

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;2_defaultkey.png&#34;  alt=&#34;Observing default encryption key and override in Password function&#34;   style=&#34;border-radius: 8px;&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Observing default encryption key and override in Password function&lt;/figcaption&gt;
    
  &lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;After accepting the key as an inline function argument, &lt;code&gt;Password()&lt;/code&gt; passes it to &lt;code&gt;InitKey&lt;/code&gt;, which splits the input into a key and IV for encryption.&lt;/p&gt;

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;3_keyinit.png&#34;  alt=&#34;Observing the key initialization process in C2SConnection.dll&#34;   style=&#34;border-radius: 8px;&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Observing the key initialization process in C2SConnection.dll&lt;/figcaption&gt;
    
  &lt;/figure&gt;


&lt;p&gt;The &lt;code&gt;InitKey&lt;/code&gt; function is deterministic: all passwords are encrypted with the same key and IV. If an attacker were to extract this key from one installation of ImageDirector Capture, they could decrypt passwords from other deployments.&lt;/p&gt;
&lt;p&gt;This finding was assigned CVE-2025-58740.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&#34;taking-off-the-mask-insecure-masked-credential-fields&#34;&gt;Taking Off The Mask: Insecure Masked Credential Fields&lt;/h1&gt;
&lt;p&gt;In the &lt;code&gt;Connection Settings&lt;/code&gt; dialog, ImageDirector Capture shows a field with the masked database password. Although the password is masked, it exists in the application&amp;rsquo;s memory as plaintext. We used the &amp;ldquo;&lt;a href=&#34;https://www.nirsoft.net/utils/bullets_password_view.html&#34; target=&#34;_blank&#34;&gt;Bullets Password View&lt;/a&gt;&amp;rdquo; tool from NirSoft to read these credentials.&lt;/p&gt;
&lt;p&gt;Notably, we confirmed that the &lt;code&gt;Connection Settings&lt;/code&gt; dialog was not vulnerable to this attack when manually launched from the Settings menu within the application. However, it was vulnerable when the application failed to connect to the database on initial load and subsequently loaded &lt;code&gt;Connection Settings&lt;/code&gt;. We induced this state by setting the &amp;ldquo;ServerInstance&amp;rdquo; value in the program&amp;rsquo;s &lt;code&gt;Connections.config&lt;/code&gt; file to a non-existent server address.&lt;/p&gt;

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;4_connectionsettings.png&#34;  alt=&#34;Viewing the masked password in the Connection Settings window&#34;   style=&#34;border-radius: 8px;&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Viewing the masked password in the Connection Settings window&lt;/figcaption&gt;
    
  &lt;/figure&gt;



  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;5_bulletspassview.png&#34;  alt=&#34;Extracting the database password with BulletsPassView&#34;   style=&#34;border-radius: 8px;&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Extracting the database password with BulletsPassView&lt;/figcaption&gt;
    
  &lt;/figure&gt;



  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;6_unmaskmeme.png&#34;  alt=&#34;Meme of man removing mask from a masked password, revealing a password&#34;   style=&#34;border-radius: 8px;&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Deploying relevant meme&lt;/figcaption&gt;
    
  &lt;/figure&gt;


&lt;p&gt;This finding was assigned CVE-2025-58741.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&#34;im-the-server-send-me-your-password-mssql-pass-back&#34;&gt;I&amp;rsquo;m The Server, Send Me Your Password: MSSQL Pass-Back&lt;/h1&gt;
&lt;p&gt;Revisiting the &lt;code&gt;Connection Settings&lt;/code&gt; dialog, we wondered what would happen if we changed the &lt;code&gt;Server&lt;/code&gt; IP address to a different value: would the application attempt to login? Yes, it would! We were able to extract the database password by pointing ImageDirector Capture at a &lt;a href=&#34;https://github.com/defragmentator/mitmsqlproxy&#34; target=&#34;_blank&#34;&gt;mitmsqlproxy&lt;/a&gt; instance. After clicking &lt;code&gt;Test Connection&lt;/code&gt;, the application sent its credentials over the network.&lt;/p&gt;

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;7_mitmsqlproxy.png&#34;  alt=&#34;Intercepting database credentials with mitmsqlproxy&#34;   style=&#34;border-radius: 8px;&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Intercepting database credentials with mitmsqlproxy&lt;/figcaption&gt;
    
  &lt;/figure&gt;


&lt;p&gt;This finding was assigned CVE-2025-58742.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&#34;doesnt-encrypt-securely-des&#34;&gt;Doesn&amp;rsquo;t Encrypt Securely: DES&lt;/h1&gt;
&lt;p&gt;When we inspected the encryption function, we found that ImageDirector Capture uses the DES algorithm to encrypt and decrypt data. DES is insecure, and CISA &lt;a href=&#34;https://www.cisa.gov/sites/default/files/2024-05/23_0918_fpic_AES-Transition-WhitePaper_Final_508C_24_0513.pdf&#34; target=&#34;_blank&#34;&gt;recommends&lt;/a&gt; replacing it with a secure algorithm like AES-256.&lt;/p&gt;

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;8_encryptfunction.png&#34;  alt=&#34;Viewing DES encryption in the Encrypt function&#34;   style=&#34;border-radius: 8px;&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Viewing DES encryption in the Encrypt function&lt;/figcaption&gt;
    
  &lt;/figure&gt;


&lt;p&gt;This finding was assigned CVE-2025-58743.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&#34;all-your-backups-are-belong-to-us-hardcoded-credentials&#34;&gt;All Your Backups Are Belong To Us: Hardcoded Credentials&lt;/h1&gt;
&lt;p&gt;In addition to the hardcoded encryption key for passwords, the application contains a hardcoded password (the &lt;code&gt;DelayedTransmissionPassword&lt;/code&gt;), which is used for encrypting and decrypting archive backup files. An attacker with access to encrypted archive files would be able to decrypt the files with the password and extract data.&lt;/p&gt;

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;9_delayedtransmissionpassword.png&#34;  alt=&#34;Viewing the hardcoded password in C2SGlobalSettings.dll&#34;   style=&#34;border-radius: 8px;&#34;  /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Viewing the hardcoded password in C2SGlobalSettings.dll&lt;/figcaption&gt;
    
  &lt;/figure&gt;


&lt;p&gt;This finding was assigned CVE-2025-58744.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;The multiple vulnerabilities in this software illustrate the importance of in-depth testing. We were pleased to see that the vendor took action to promptly remediate these vulnerabilities in response to our disclosure.&lt;/p&gt;
&lt;h1 id=&#34;timeframe&#34;&gt;Timeframe&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;October 15-23, 2025 – SRA attempts to establish contact with Milner to disclose vulnerabilities.&lt;/li&gt;
&lt;li&gt;November 04, 2025 – Milner acknowledges vulnerabilities and intent to fix.&lt;/li&gt;
&lt;li&gt;December 31, 2025 – Milner releases ImageDirector Capture 7.6.3.25808.&lt;/li&gt;
&lt;li&gt;January 20, 2026 – SRA publishes CVEs and advisory.&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
  </channel>
</rss>
