<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on srdusr</title><link>https://srdusr.com/tags/security/</link><description>Recent content in Security on srdusr</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 03 Sep 2026 07:34:43 +0200</lastBuildDate><atom:link href="https://srdusr.com/tags/security/index.xml" rel="self" type="application/rss+xml"/><item><title>Hardening a Small Server Without Making It Unusable</title><link>https://srdusr.com/blog/hardening-a-small-server/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate><guid>https://srdusr.com/blog/hardening-a-small-server/</guid><description>&lt;p&gt;A single virtual machine running a couple of small sites does not need a
security programme. It needs about a dozen specific changes, most of
which take a minute each.&lt;/p&gt;
&lt;p&gt;Two of them look finished when they are not, and those two are worth
more attention than the rest combined. They are at the end.&lt;/p&gt;
&lt;h2 id="start-with-the-front-door"&gt;Start with the front door&lt;/h2&gt;
&lt;p&gt;Key-only SSH, no root login, and a firewall that rejects by default.&lt;/p&gt;</description></item><item><title>Recon Is a Loop, Not a Pass</title><link>https://srdusr.com/blog/recon-is-a-loop/</link><pubDate>Fri, 21 Aug 2026 00:00:00 +0000</pubDate><guid>https://srdusr.com/blog/recon-is-a-loop/</guid><description>&lt;p&gt;Enumeration is the phase that decides the engagement. More boxes fall to
thorough enumeration than to clever exploitation, and the rule on a stuck target
is almost always &amp;ldquo;enumerate harder&amp;rdquo;, not &amp;ldquo;find a better exploit&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The mistake that costs the most time is treating recon as a pass: scan, read the
output, move to exploitation. It is a loop. Each finding sends you back to
enumerate something new, and the surface grows as you work.&lt;/p&gt;</description></item><item><title>Defending Yourself With What You Know About Attackers</title><link>https://srdusr.com/blog/personal-digital-security/</link><pubDate>Fri, 24 Jul 2026 00:00:00 +0000</pubDate><guid>https://srdusr.com/blog/personal-digital-security/</guid><description>&lt;p&gt;The attacks I read about for work are not reserved for interesting targets.
The same credential stuffing, the same phishing, the same stolen device: they
arrive at ordinary people every day, and knowing how they work is only an
advantage if you turn it around and point it at your own life.&lt;/p&gt;
&lt;p&gt;A stolen laptop is what made me start writing any of this down. What follows is
what I actually do, in the order the effort pays back.&lt;/p&gt;</description></item><item><title>Turning a Dumb Shell Into a Real TTY</title><link>https://srdusr.com/blog/upgrading-a-dumb-shell/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0000</pubDate><guid>https://srdusr.com/blog/upgrading-a-dumb-shell/</guid><description>&lt;p&gt;A raw reverse shell from a web exploit is a dumb shell. No tab completion, no
arrow keys, no job control. It dies if you press Ctrl-C, and it cannot run an
interactive program like &lt;code&gt;su&lt;/code&gt;, &lt;code&gt;ssh&lt;/code&gt;, or a text editor. Upgrade it to a full TTY
before you do real work in it, because every minute spent in a dumb shell is a
minute of typing full paths and losing the session to a stray keystroke.&lt;/p&gt;</description></item><item><title>Encryption Gives Confidentiality, Not Integrity</title><link>https://srdusr.com/blog/encryption-is-not-integrity/</link><pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate><guid>https://srdusr.com/blog/encryption-is-not-integrity/</guid><description>&lt;p&gt;Encrypting data hides it. It does not prove the data was not changed. These are
two different properties, and assuming the first provides the second is the root
of a whole class of real vulnerabilities.&lt;/p&gt;
&lt;h2 id="why-it-holds"&gt;Why it holds&lt;/h2&gt;
&lt;p&gt;A cipher maps plaintext to ciphertext so an eavesdropper cannot read it. Nothing
in that mapping detects tampering with the ciphertext. In CBC mode an attacker
can flip bits and, given feedback on whether the result decrypts to valid
padding, recover and forge plaintext without the key. That is the
padding oracle attack, and it exists precisely because the system checked
confidentiality but never integrity.&lt;/p&gt;</description></item><item><title>Counting Your Shell History Can Execute It</title><link>https://srdusr.com/blog/zsh-arithmetic-subscript-executes/</link><pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate><guid>https://srdusr.com/blog/zsh-arithmetic-subscript-executes/</guid><description>&lt;p&gt;A &amp;ldquo;top ten commands&amp;rdquo; script is about the most harmless thing you can write. In
zsh, one common way to write it executes your history instead of counting it.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;You want a count of your most-used commands. The obvious tool is an associative
array keyed by the command line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-zsh" data-lang="zsh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;typeset&lt;/span&gt; -A counts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="nb"&gt;read&lt;/span&gt; -r cmd&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;((&lt;/span&gt; counts&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$cmd&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;++ &lt;span class="o"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt; &amp;lt; &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;fc&lt;/span&gt; -ln 1&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This runs every history entry that contains a command substitution.&lt;/p&gt;</description></item><item><title>Thorough Enumeration Beats Clever Exploitation</title><link>https://srdusr.com/blog/enumeration-beats-exploitation/</link><pubDate>Tue, 02 Dec 2025 00:00:00 +0000</pubDate><guid>https://srdusr.com/blog/enumeration-beats-exploitation/</guid><description>&lt;p&gt;More machines fall to finding the thing that was already there than to a clever
exploit. When a box is stuck, the fix is almost always to enumerate harder, not
to reach for a more advanced technique. The winning path was usually visible at
hour one and dismissed.&lt;/p&gt;
&lt;h2 id="why-it-holds"&gt;Why it holds&lt;/h2&gt;
&lt;p&gt;An exploit needs a target, and finding the target is enumeration. A service on a
high port, a virtual host that only answers to its name, a comment in the page
source, a readable share: each is a foothold that no exploit skill substitutes
for. Enumeration also compounds. Every credential and hostname found sends you
back to enumerate something new, so the surface grows as you work.&lt;/p&gt;</description></item><item><title>Vulnerabilities Cluster at Trust Boundaries</title><link>https://srdusr.com/blog/trust-boundaries/</link><pubDate>Fri, 14 Nov 2025 00:00:00 +0000</pubDate><guid>https://srdusr.com/blog/trust-boundaries/</guid><description>&lt;p&gt;A trust boundary is any point where data crosses from a less-trusted context
into a more-trusted one: user input into a query, a request into a privileged
process, one tenant&amp;rsquo;s data into another&amp;rsquo;s view. Almost every vulnerability class
is a failure to re-establish trust at such a crossing.&lt;/p&gt;
&lt;h2 id="why-it-holds"&gt;Why it holds&lt;/h2&gt;
&lt;p&gt;Injection is untrusted input crossing into an interpreter without being made
safe for it: SQL injection into a database, command injection into a
shell, template injection into a template engine, cross-site scripting into
another user&amp;rsquo;s browser. Authorisation bugs are a principal crossing into data it should
not reach. Even privilege escalation, whether through a SUID binary or a potato attack,
is a low-trust process crossing into a high-trust one. Naming the boundary tells
you what defence is missing: encode for the destination context, or check the
right to cross.&lt;/p&gt;</description></item></channel></rss>