<?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: Muhammad Taha Khan</title>
    <description>The latest articles on DEV Community by Muhammad Taha Khan (@khanmarshai).</description>
    <link>https://dev.to/khanmarshai</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3575224%2Fcd4f2df2-0e50-482d-bf68-3c1feb321f36.png</url>
      <title>DEV Community: Muhammad Taha Khan</title>
      <link>https://dev.to/khanmarshai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khanmarshai"/>
    <language>en</language>
    <item>
      <title>Remote Code Execution via Profile Picture Upload on Academico (CVE-2025-10763)</title>
      <dc:creator>Muhammad Taha Khan</dc:creator>
      <pubDate>Mon, 20 Oct 2025 12:40:58 +0000</pubDate>
      <link>https://dev.to/khanmarshai/remote-code-execution-via-profile-picture-upload-on-academico-cve-2025-10763-20c0</link>
      <guid>https://dev.to/khanmarshai/remote-code-execution-via-profile-picture-upload-on-academico-cve-2025-10763-20c0</guid>
      <description>&lt;h2&gt;
  
  
  Remote Code Execution via Profile Picture Upload on Academico (CVE-2025-10763) - PoC Redacted
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: Academico's profile picture upload lacked server-side file-type validation and served uploaded files from a public directory. I uploaded an executable file, accessed it directly, and confirmed remote code execution. Technical PoC details and direct payloads have been redacted for safety.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure note&lt;/strong&gt;: CVE-2025-10763 is referenced below. This post intentionally omits raw exploit code and certain command payloads while vendor coordination and disclosure status are confirmed.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Vulnerability overview
&lt;/h2&gt;

&lt;p&gt;I achieved Remote Code Execution (RCE) via the profile-picture file upload on &lt;a href="https://github.com/academico-sis/academico/tree/oss" rel="noopener noreferrer"&gt;Academico&lt;/a&gt;. The root causes were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;unrestricted upload of arbitrary file types server-side, and&lt;/li&gt;
&lt;li&gt;publicly served storage that allowed uploaded files to be accessed and executed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This combination enabled an attacker to place executable content on the server and have it interpreted, resulting in full RCE in my test environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical background
&lt;/h2&gt;

&lt;p&gt;Clients assume profile-picture endpoints accept only image types - &lt;code&gt;.png&lt;/code&gt;, &lt;code&gt;.jpg&lt;/code&gt;, &lt;code&gt;.jpeg&lt;/code&gt;, &lt;code&gt;.gif&lt;/code&gt;, etc. Servers sometimes rely on client-side checks or simple extension checks; attackers can bypass these. Normally, even if a bad file is uploaded, server configuration or storage policies should prevent execution from upload directories.&lt;/p&gt;

&lt;p&gt;In this case the application accepted non-image files, retained the original upload, and the storage location was served by the web server in a way that allowed interpreter handling. That allowed an uploaded executable to be requested and executed by the server.&lt;/p&gt;




&lt;h2&gt;
  
  
  Discovery and exploitation (sanitized)
&lt;/h2&gt;

&lt;p&gt;My methodology is simple - map endpoints, interact with feature flows, and iterate.&lt;/p&gt;

&lt;p&gt;Upload a benign image - observe conversion pipeline and storage layout.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example: uploading a &lt;code&gt;.webp&lt;/code&gt; resulted in a converted &lt;code&gt;-thumb.jpg&lt;/code&gt; inside a &lt;code&gt;conversions&lt;/code&gt; folder; the original upload remained under &lt;code&gt;storage/app/public/&amp;lt;id&amp;gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Upload an SVG to test conversion failure handling.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The conversion failed and no &lt;code&gt;conversions&lt;/code&gt; output existed; the app still attempted to serve the converted URL. The original &lt;code&gt;.svg&lt;/code&gt; was accessible at the public storage URL and triggered client-side script execution in my test lab.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Upload an executable file intended to be interpreted by the server.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conversion failed as with the SVG; the original upload was directly accessible via the storage URL.&lt;/li&gt;
&lt;li&gt;I confirmed server-side execution by requesting a benign command parameter and observing the command output returned in the HTTP response. Proof-of-concept payloads are redacted.&lt;/li&gt;
&lt;li&gt;Practical exploitation led to an interactive session on the host; reverse-shell payload and full invocation details have been redacted.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Screenshots and raw payloads have been redacted for safety.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Impact analysis
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Severity&lt;/strong&gt; - Critical; RCE enables complete compromise of the host and potential lateral movement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidentiality&lt;/strong&gt; - High; attacker can read files accessible to the application user - credentials, source, backups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrity&lt;/strong&gt; - High; attacker can modify application files, implant backdoors, and tamper with logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Availability&lt;/strong&gt; - High; attacker can disrupt or destroy service, or deploy disruptive malware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exploitability&lt;/strong&gt; - Low to moderate; exploit only requires the ability to upload a profile picture. If uploads are allowed for unauthenticated users, exploitability is trivial; if limited to authenticated users, any allowed account can exploit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope&lt;/strong&gt; - Potential full server compromise and data exfiltration; possible lateral pivot depending on environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Related issue&lt;/strong&gt; - SVG upload yielded XSS; combined with the file-execution issue, the attack surface is larger.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Remediation - immediate and medium-term
&lt;/h2&gt;

&lt;p&gt;Prioritize layered defenses; do not rely on a single control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Immediate / high-priority fixes&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Disable execution in upload directories - ensure storage is not executable and webserver configs deny interpreter handling for upload paths.&lt;/li&gt;
&lt;li&gt;Store uploads outside the webroot or use object storage - serve via controller or signed URLs instead of direct public files.&lt;/li&gt;
&lt;li&gt;Enforce strict file-type validation - server-side checks using &lt;code&gt;finfo&lt;/code&gt; or robust image libraries; whitelist extensions and MIME types.&lt;/li&gt;
&lt;li&gt;Reject or sanitize SVGs - either disallow SVGs or sanitize them to remove scripts and event attributes.&lt;/li&gt;
&lt;li&gt;Perform server-side image processing and serve only processed images - convert to safe raster formats and never serve originals.&lt;/li&gt;
&lt;li&gt;Sanitize and normalize filenames - use randomized names; avoid user-supplied filenames; validate and normalize paths.&lt;/li&gt;
&lt;li&gt;Set restrictive file permissions - minimum needed permissions; ensure no execute bit is set.&lt;/li&gt;
&lt;li&gt;Add a strong Content Security Policy (CSP) - reduce impact of client-side XSS.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Timeline
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Disclosed to VulDB: &lt;code&gt;2025-09-03 02:12 PM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Moderated on VulDB: &lt;code&gt;2025-09-20 09:26 AM&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;CVE assigned: &lt;strong&gt;CVE-2025-10763&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: the CVE identifier is public; PoC payloads and some exploit details are intentionally redacted here pending clear vendor- or CNA-level confirmation that full technical disclosure is allowed.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  References and credits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Academico project - &lt;a href="https://github.com/academico-sis/academico/tree/oss" rel="noopener noreferrer"&gt;https://github.com/academico-sis/academico/tree/oss&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CVE-2025-10763 - assigned for this issue&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final notes
&lt;/h2&gt;

&lt;p&gt;I intentionally redacted direct exploit payloads and command strings. If you maintain Academico or run a service with user-uploaded content, prioritize the immediate fixes above. If you want a follow-up post with full PoC after vendor confirmation, I will publish it as an update and link it here.&lt;/p&gt;




</description>
      <category>security</category>
      <category>websecurity</category>
      <category>infosec</category>
    </item>
  </channel>
</rss>
