<?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: SAMYUKTHA SARAVANAN</title>
    <description>The latest articles on DEV Community by SAMYUKTHA SARAVANAN (@samyuktha_saravanan_97001).</description>
    <link>https://dev.to/samyuktha_saravanan_97001</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%2F4093457%2Fd973525d-3cca-47e8-a1c7-a0c3ed79b160.png</url>
      <title>DEV Community: SAMYUKTHA SARAVANAN</title>
      <link>https://dev.to/samyuktha_saravanan_97001</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samyuktha_saravanan_97001"/>
    <language>en</language>
    <item>
      <title>Learning OWASP A01 and A02: Broken Access Control and Security Misconfiguration</title>
      <dc:creator>SAMYUKTHA SARAVANAN</dc:creator>
      <pubDate>Wed, 26 Aug 2026 13:06:13 +0000</pubDate>
      <link>https://dev.to/samyuktha_saravanan_97001/learning-owasp-a01-and-a02-broken-access-control-and-security-misconfiguration-44a6</link>
      <guid>https://dev.to/samyuktha_saravanan_97001/learning-owasp-a01-and-a02-broken-access-control-and-security-misconfiguration-44a6</guid>
      <description>&lt;p&gt;&lt;strong&gt;By Samyuktha&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not every learning exercise ends with a dramatic finding, and that's a fine outcome. This post walks through two OWASP Top 10 (2025) categories I studied hands-on via TryHackMe — A01: Broken Access Control and A02: Security Misconfiguration — and how I applied that thinking to a real, authorized production web application afterward.&lt;/p&gt;

&lt;p&gt;The result on the real target wasn't a vulnerability. It was a clean pass. That turned out to be its own useful lesson about what a methodical assessment actually looks like.&lt;/p&gt;

&lt;p&gt;Scope: This post covers concepts from two TryHackMe rooms plus a brief, authorized look at a production login/dashboard flow. No destructive testing, brute-forcing, or data modification was performed, and identifying details about the target have been omitted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 1: A01 — Broken Access Control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Broken access control is consistently ranked the top web application risk, and going through the room made clear why: it's less about clever exploitation and more about the server trusting things it shouldn't.&lt;/p&gt;

&lt;p&gt;A few concepts stood out:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IDOR (Insecure Direct Object Reference) —&lt;/strong&gt; when an app exposes an internal identifier (like a numeric user or order ID in a URL or request body) and doesn't verify the requester actually owns that resource. Swap the ID, and you may be looking at someone else's data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Missing function-level access control —&lt;/strong&gt; a feature like an admin panel might be hidden from the UI for regular users, but if the endpoint itself doesn't check role server-side, it's still reachable by anyone who finds or guesses the URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privilege escalation via parameter tampering —&lt;/strong&gt; modifying a role or permission value in a request (for example, a role field) to see if the server blindly trusts what the client sends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forced browsing —&lt;/strong&gt; manually requesting pages that aren't linked in the UI but still exist and respond on the server.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The recurring theme: hiding something in the UI is a design choice,  not a security control. Every sensitive action needs to be re-checked server-side, every time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Phase 2: A02 — Security Misconfiguration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This category is less about flawed logic and more about the gap between "the app works" and "the app was actually hardened" — defaults, leftovers, and things nobody circled back to clean up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Default or sample credentials still active&lt;/li&gt;
&lt;li&gt;Verbose error messages leaking stack traces, file paths, or framework versions&lt;/li&gt;
&lt;li&gt;Directory listing left enabled&lt;/li&gt;
&lt;li&gt;Missing security headers (Content-Security-Policy, X-Frame-Options, Strict-Transport-Security)&lt;/li&gt;
&lt;li&gt;Outdated software with known CVEs still running in production&lt;/li&gt;
&lt;li&gt;Unnecessary services or ports left exposed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What stood out here is how mundane most of these issues actually are. They're rarely clever — they're just things nobody revisited before shipping. Which also makes them some of the easiest wins in a real assessment, when they exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3: Applying It to a Real Target&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With those two categories fresh, I got the chance to apply the same checklist to a live production web application I was authorized to test, using Burp Suite to intercept and review the login and post-login dashboard flow.&lt;/p&gt;

&lt;p&gt;I went through the A01 checklist specifically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tested for IDOR by swapping identifiers in requests made with my own low-privilege account&lt;/li&gt;
&lt;li&gt;Checked whether role-restricted functionality was reachable directly, bypassing the UI&lt;/li&gt;
&lt;li&gt;Compared what the UI exposed against what the server actually permitted&lt;/li&gt;
&lt;li&gt;Spot-checked response headers and error handling for A02-style misconfiguration signs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;: nothing exploitable turned up. No accessible IDOR, no reachable hidden admin functionality, no glaring header or error-handling issue in what I checked.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A clean result isn't a failed assessment — it's evidence the access control model held up under a defined set of tests, plus a documented baseline for the next round.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This exercise reinforced something the labs don't always emphasize as strongly as real targets do: a negative result is still a result. It's tempting, especially early on, to feel like an assessment only "counts" if it turns up a finding. But ruling things out methodically — and being honest that nothing jumped out — is exactly what a real assessment looks like most of the time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Good security testing isn't about finding the most dramatic bug. It's about applying the checklist consistently and being straightforward about what did and didn't hold up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next, I'm planning to work through A03: Injection and start keeping more structured notes so these write-ups build into an actual testing checklist over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Responsible Disclosure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Any production testing referenced here was performed under authorized scope as part of a formal assessment, and identifying details about the target have been omitted from this post.&lt;/p&gt;

</description>
      <category>security</category>
      <category>websecurity</category>
      <category>owasp</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>From a Static Marketing Site to a Live Production API: A Web Application Security Walkthrough</title>
      <dc:creator>SAMYUKTHA SARAVANAN</dc:creator>
      <pubDate>Tue, 25 Aug 2026 13:26:12 +0000</pubDate>
      <link>https://dev.to/samyuktha_saravanan_97001/from-a-static-marketing-site-to-a-live-production-api-a-web-application-security-walkthrough-2dd6</link>
      <guid>https://dev.to/samyuktha_saravanan_97001/from-a-static-marketing-site-to-a-live-production-api-a-web-application-security-walkthrough-2dd6</guid>
      <description>&lt;p&gt;By Samyuktha S&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not every security assessment ends with a critical vulnerability — and that's fine. Real-world testing involves mapping, dead ends, false positives, and genuine findings.&lt;/p&gt;

&lt;p&gt;This post covers an authorized assessment of a healthcare recruitment/networking platform [TARGET]. The assessment started with a static front-end, then moved to the real production application discovered through subdomain enumeration, resulting in two findings worth reporting.&lt;/p&gt;

&lt;p&gt;The key lesson is simple: &lt;strong&gt;verify before claiming&lt;/strong&gt;. Some things initially looked vulnerable but were ruled out after testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scope&lt;/strong&gt;: TARGET and associated subdomains. No destructive testing, brute-forcing, or data modification was performed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 1: Mapping the Surface&lt;/strong&gt;&lt;br&gt;
The assessment began with the primary domain, which contained a homepage, login, registration, job portal, and contact form.&lt;/p&gt;

&lt;p&gt;Basic reconnaissance — including viewing page source, inspecting network requests, and reviewing JavaScript — showed that these features had no real backend.&lt;/p&gt;

&lt;p&gt;The login button performed a client-side redirect without submitting credentials or sending a request. The dashboard displayed the same hardcoded content regardless of authentication state. Registration, contact, and job-related forms followed a similar pattern.&lt;/p&gt;

&lt;p&gt;This was not treated as an authentication bypass because there was no real data or backend logic behind these pages. However, it was worth noting as a design issue that could become risky if a real backend is later connected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 2: Finding the Real Application&lt;/strong&gt;&lt;br&gt;
The next step was passive subdomain enumeration using publicly available information, including Certificate Transparency logs and passive DNS sources.&lt;/p&gt;

&lt;p&gt;This revealed an API host and a corresponding application host.&lt;/p&gt;

&lt;p&gt;Unlike the primary domain, these were active production systems. The application was a real single-page application backed by an Express.js API with OTP authentication, role-based data, and a REST API.&lt;/p&gt;

&lt;p&gt;This became the focus of the assessment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 3: Testing and Ruling Things Out&lt;/strong&gt;&lt;br&gt;
CORS Headers — Investigated, Not Exploitable&lt;br&gt;
The API returned:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Access-Control-Allow-Origin: *&lt;br&gt;
  Access-Control-Allow-Credentials: true&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This looked concerning because it appeared to allow any origin to make credentialed requests.&lt;/p&gt;

&lt;p&gt;However, testing showed that the server returned a static * rather than reflecting arbitrary origins.&lt;/p&gt;

&lt;p&gt;Browsers do not allow credentialed CORS requests with a wildcard origin, so no working exploit could be demonstrated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; A configuration issue worth cleaning up, but not a confirmed vulnerability.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A suspicious configuration should always be tested before being  reported as exploitable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Phase 4: Two Findings That Held Up&lt;/strong&gt;&lt;br&gt;
Finding 1 — Authentication Token Stored in Browser localStorage&lt;br&gt;
The application's JavaScript showed that authentication tokens and user-related information were stored in localStorage:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;localStorage.setItem("userToken", [TOKEN]);&lt;br&gt;
  localStorage.setItem("userId", [USER_ID]);&lt;br&gt;
  localStorage.setItem("roleId", [ROLE_ID]);&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Unlike HttpOnly cookies, localStorage can be accessed by JavaScript running on the same origin.&lt;/p&gt;

&lt;p&gt;This means a future XSS vulnerability could potentially expose authentication tokens and user information. No XSS vulnerability was claimed during this assessment, but this design increases the impact of any future XSS issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Low–Medium&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remediation&lt;/strong&gt;: Consider storing authentication tokens in HttpOnly, Secure, and appropriately configured SameSite cookies, with CSRF protections where necessary.&lt;/p&gt;

&lt;p&gt;Finding 2 — Possible User Enumeration via Password Reset Endpoint&lt;br&gt;
The password-reset endpoint returned a distinct response for a non-existent account:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;POST /api/user/forgot-password/send-otp&lt;br&gt;
 {&lt;br&gt;
   "email": "[NONEXISTENT_TEST_EMAIL]"&lt;br&gt;
 }&lt;br&gt;
 Response:&lt;br&gt;
 {&lt;br&gt;
   "message": "User not found"&lt;br&gt;
 }&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This could allow attackers to determine whether an email address is registered if valid accounts receive a different response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important limitation&lt;/strong&gt;: I did not test a real user's email address for comparison because that was outside the authorized scope. Therefore, this is reported as a probable user enumeration issue rather than a fully confirmed vulnerability.&lt;/p&gt;

&lt;p&gt;The platform owner can confirm this internally using an authorized test account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Severity&lt;/strong&gt;: Low–Medium&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remediation&lt;/strong&gt;: Return the same generic response for both existing and non-existing accounts, for example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If an account is associated with this email address, an OTP has been sent.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Response timing should also be kept as consistent as practical to reduce timing-based enumeration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
This assessment reinforced the importance of not overstating findings.&lt;/p&gt;

&lt;p&gt;The accessible dashboard and CORS configuration initially looked concerning but did not result in a confirmed exploit. The token storage design and probable password-reset enumeration issue, however, were worth reporting.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Good security testing is not about finding the most dramatic   vulnerability. It's about verifying what is actually exploitable and being honest about what cannot be confirmed.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Responsible Disclosure&lt;/strong&gt;&lt;br&gt;
The findings were reported to the platform owner before publication. Sensitive, proprietary, and identifying details have been omitted from this post.&lt;/p&gt;

&lt;p&gt;Have questions about this methodology or want to discuss the findings? Feel free to reach out.&lt;/p&gt;

</description>
      <category>security</category>
      <category>website</category>
      <category>websecurity</category>
      <category>cybersecurity</category>
    </item>
  </channel>
</rss>
