<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on b4y.dev - Binary dev</title><link>https://b4y.dev/posts/</link><description>Recent content in Posts on b4y.dev - Binary dev</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 24 Mar 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://b4y.dev/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Next.js Middleware Authorization Bypass - CVE-2025-29927</title><link>https://b4y.dev/posts/nextjs-authorization-bypass-cve-2025-29927/</link><pubDate>Mon, 24 Mar 2025 00:00:00 +0000</pubDate><guid>https://b4y.dev/posts/nextjs-authorization-bypass-cve-2025-29927/</guid><description>&lt;p&gt;A critical security vulnerability has been discovered in Next.js that enables attackers to bypass middleware-based authorization checks. This comprehensive guide analyzes the vulnerability, demonstrates testing methods, and provides remediation strategies.&lt;/p&gt;
&lt;h2 id="key-takeaways"&gt;Key Takeaways&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Critical vulnerability affecting Next.js versions 11.1.4 through 15.2.3&lt;/li&gt;
&lt;li&gt;Allows complete bypass of middleware-based security controls&lt;/li&gt;
&lt;li&gt;Simple exploitation using a single HTTP header&lt;/li&gt;
&lt;li&gt;Affects self-hosted Next.js applications using middleware&lt;/li&gt;
&lt;li&gt;Official patches available for all affected versions&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="technical-analysis"&gt;Technical Analysis&lt;/h2&gt;
&lt;h3 id="understanding-the-vulnerability"&gt;Understanding the Vulnerability&lt;/h3&gt;
&lt;p&gt;The vulnerability (CVE-2025-29927) exploits a design flaw in Next.js&amp;rsquo;s middleware processing system. At its core, the issue lies in how Next.js handles the &lt;code&gt;x-middleware-subrequest&lt;/code&gt; header, which was originally designed for internal use to prevent recursive middleware execution.&lt;/p&gt;</description></item><item><title>Understanding and Writing Suricata IDS Rules</title><link>https://b4y.dev/posts/ids-suricata-rules/</link><pubDate>Mon, 24 Feb 2025 00:00:00 +0000</pubDate><guid>https://b4y.dev/posts/ids-suricata-rules/</guid><description>&lt;p&gt;Suricata is a powerful open-source Intrusion Detection System (IDS) that helps monitor network traffic for suspicious activities. One of its key features is the ability to write custom rules to detect specific patterns or behaviors. In this post, we&amp;rsquo;ll explore how to write effective Suricata rules with practical examples.&lt;/p&gt;
&lt;h2 id="basic-rule-structure"&gt;Basic Rule Structure&lt;/h2&gt;
&lt;p&gt;A Suricata rule follows this basic structure:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-txt" data-lang="txt"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;action protocol source_ip source_port -&amp;gt; destination_ip destination_port (rule options)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let&amp;rsquo;s break down each component:&lt;/p&gt;</description></item><item><title>Setup OpenVPN Server on Linux</title><link>https://b4y.dev/posts/linux-openvpn-server/</link><pubDate>Mon, 16 Sep 2024 00:00:00 +0000</pubDate><guid>https://b4y.dev/posts/linux-openvpn-server/</guid><description>&lt;p&gt;OpenVPN is an open source SSL VPN solution.&lt;/p&gt;
&lt;p&gt;OpenVPN server installation can be quite complicated. We&amp;rsquo;ll use a script which manage all installation and configuration step for you.&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;Download script and run it, it will ask you for some information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UDP or TCP&lt;/li&gt;
&lt;li&gt;Network port&lt;/li&gt;
&lt;li&gt;DNS Servers&lt;/li&gt;
&lt;li&gt;Client name&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget -O openvpn-install.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bash openvpn-install.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can re-run script to generate new client configuration, revoke old client or uninstall OpenVPN server.&lt;/p&gt;</description></item><item><title>Code analysis with SonarQube</title><link>https://b4y.dev/posts/sast-sonarqube/</link><pubDate>Mon, 02 Sep 2024 00:00:00 +0000</pubDate><guid>https://b4y.dev/posts/sast-sonarqube/</guid><description>&lt;p&gt;SonarQube is a tool to do static code analysis, also known as Static Application Security Testing (SAST).&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a great tool to find security and quality issues in your code.&lt;/p&gt;
&lt;h2 id="install-sonarqube"&gt;Install SonarQube&lt;/h2&gt;
&lt;p&gt;To install SonarQube, we&amp;rsquo;ll use Docker and &lt;code&gt;docker-compose.yml&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Here a ready to use and updated &lt;code&gt;docker-compose.yml&lt;/code&gt; file to install SonarQube with PostgreSQL database:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;services&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;sonarqube&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;sonarqube:community&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hostname&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;sonarqube&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;container_name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;sonarqube&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;read_only&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;depends_on&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;db&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;condition&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;service_healthy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;environment&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;SONAR_JDBC_URL&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;jdbc:postgresql://db:5432/sonar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;SONAR_JDBC_USERNAME&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;sonar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;SONAR_JDBC_PASSWORD&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;sonar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;sonarqube_data:/opt/sonarqube/data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;sonarqube_extensions:/opt/sonarqube/extensions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;sonarqube_logs:/opt/sonarqube/logs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;sonarqube_temp:/opt/sonarqube/temp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ports&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#e6db74"&gt;&amp;#34;9000:9000&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;db&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;postgres:17&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;healthcheck&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;test&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;CMD-SHELL&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;pg_isready&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;interval&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;10s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;timeout&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;5s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;retries&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hostname&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;postgresql&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;container_name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;postgresql&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;environment&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;POSTGRES_USER&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;sonar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;POSTGRES_PASSWORD&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;sonar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;POSTGRES_DB&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;sonar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;postgresql:/var/lib/postgresql&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;postgresql_data:/var/lib/postgresql/data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;volumes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;sonarqube_data&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;sonarqube_temp&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;sonarqube_extensions&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;sonarqube_logs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;postgresql&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;postgresql_data&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Start containers:&lt;/p&gt;</description></item><item><title>Install psql (PostgreSQL client) on MacOS</title><link>https://b4y.dev/posts/psql-install-macos/</link><pubDate>Mon, 22 Jul 2024 00:00:00 +0000</pubDate><guid>https://b4y.dev/posts/psql-install-macos/</guid><description>&lt;p&gt;PostgreSQL is a database management system. &lt;code&gt;psql&lt;/code&gt; is a command line tool to connect to PostgreSQL database.&lt;/p&gt;
&lt;h2 id="install-psql"&gt;Install psql&lt;/h2&gt;
&lt;p&gt;Install psql without PostgreSQL server with brew:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install libpq
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew link --force libpq
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will install Postgres client utilities like &lt;code&gt;psql&lt;/code&gt; and &lt;code&gt;pg_dump&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Setup OpenVPN server with Docker</title><link>https://b4y.dev/posts/docker-openvpn-server/</link><pubDate>Mon, 08 Jul 2024 00:00:00 +0000</pubDate><guid>https://b4y.dev/posts/docker-openvpn-server/</guid><description>&lt;p&gt;OpenVPN is a tool to create a secure tunnel between your computer and a remote server.&lt;/p&gt;
&lt;p&gt;This post show how to setup OpenVPN server with Docker.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;You need following tools installed on your server:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="install-and-configure-openvpn-server"&gt;Install and configure OpenVPN server&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ll use &lt;a href="https://github.com/kylemanna/docker-openvpn"&gt;this repository&lt;/a&gt; to setup OpenVPN server.&lt;/p&gt;
&lt;p&gt;Docker image is available on Docker Hub, but to get latest version of dependencies, we&amp;rsquo;ll build it locally.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Clone repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/kylemanna/docker-openvpn.git
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd docker-openvpn
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Build image&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker build -t openvpn .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once image is built, we are able to configure our openvpn server and run it.&lt;/p&gt;</description></item><item><title>Visualize IO disk usage with htop</title><link>https://b4y.dev/posts/htop-show-io/</link><pubDate>Mon, 24 Jun 2024 00:00:00 +0000</pubDate><guid>https://b4y.dev/posts/htop-show-io/</guid><description>&lt;p&gt;htop is a terminal based process viewer, a useful tool to monitor system resources.&lt;/p&gt;
&lt;p&gt;IO is a measure of the amount of data read (Input) from or written (Output) to a storage device.&lt;/p&gt;
&lt;p&gt;By default, htop do not shows the amount of data read and written by processes.&lt;/p&gt;
&lt;h2 id="show-io-with-htop"&gt;Show IO with htop&lt;/h2&gt;
&lt;p&gt;Start htop as usual:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;htop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To show IO disk usage, you need add &lt;code&gt;Disk IO&lt;/code&gt; meters:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;Setup&lt;/code&gt; with &lt;code&gt;F2&lt;/code&gt; key&lt;/li&gt;
&lt;li&gt;Go to &lt;code&gt;Meters&lt;/code&gt; category&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Disk IO&lt;/code&gt; meters in available meters and validate with &lt;code&gt;Enter&lt;/code&gt; key&lt;/li&gt;
&lt;li&gt;Optionally, you can change the meters order with &lt;code&gt;Up&lt;/code&gt; and &lt;code&gt;Down&lt;/code&gt; keys&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="save-htop-configuration"&gt;Save htop configuration&lt;/h2&gt;
&lt;p&gt;htop configuration is automatically saved in &lt;code&gt;~/.config/htop/htoprc&lt;/code&gt; file.&lt;/p&gt;</description></item><item><title>Pip, update all packages with one command</title><link>https://b4y.dev/posts/pip-update-all-packages/</link><pubDate>Mon, 10 Jun 2024 00:00:00 +0000</pubDate><guid>https://b4y.dev/posts/pip-update-all-packages/</guid><description>&lt;p&gt;Pip is a package manager for Python. It&amp;rsquo;s a great tool to install and update packages. This post show how to update all packages with a one liner because the options os not offered by pip.&lt;/p&gt;
&lt;h2 id="list-all-outdated-packages"&gt;List all outdated packages&lt;/h2&gt;
&lt;p&gt;To list all outdated packages, you can use the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip list --outdated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="update-all-packages"&gt;Update all packages&lt;/h2&gt;
&lt;p&gt;To update all packages, you can use the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip list --outdated | awk -F &lt;span style="color:#e6db74"&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;NR&amp;gt;2{print$1}&amp;#39;&lt;/span&gt; | xargs pip install --upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="bash-aliases"&gt;Bash aliases&lt;/h2&gt;
&lt;p&gt;You can create a bash alias to update all packages with one liner:&lt;/p&gt;</description></item><item><title>Windows 11 installation without Microsoft account</title><link>https://b4y.dev/posts/windows-install-without-o365/</link><pubDate>Mon, 27 May 2024 00:00:00 +0000</pubDate><guid>https://b4y.dev/posts/windows-install-without-o365/</guid><description>&lt;p&gt;By default, Windows 11 installer ask for a Microsoft account, but for many context local account is a better choice.&lt;/p&gt;
&lt;h2 id="install-windows-11-with-a-local-account"&gt;Install Windows 11 with a local account&lt;/h2&gt;
&lt;p&gt;Start your Windows installation as intended. When installer ask you for your Microsoft account, disable this option with &lt;code&gt;OOBE&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;Use &lt;code&gt;shift+f10&lt;/code&gt; to open command line and execute &lt;code&gt;OOBE\BYPASSNRO&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="oobe-bypassnro.webp" alt="Windows CLI with OOBE\BYPASSNNRO"&gt;&lt;/p&gt;
&lt;p&gt;This will reboot your machine. Make sure to disconnect your network.&lt;/p&gt;</description></item><item><title>Linux, bypass root password from GRUB</title><link>https://b4y.dev/posts/linux-grub-bypass-root-password/</link><pubDate>Mon, 13 May 2024 00:00:00 +0000</pubDate><guid>https://b4y.dev/posts/linux-grub-bypass-root-password/</guid><description>&lt;p&gt;The root or user password of a Linux machine can be bypassed thank to GRUB.&lt;/p&gt;
&lt;p&gt;Following conditions are needed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grub isn&amp;rsquo;t password protected&lt;/li&gt;
&lt;li&gt;Disk encryption isn&amp;rsquo;t enabled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It works on legacy BIOS and UEFI installation.&lt;/p&gt;
&lt;h2 id="boot-linux-without-password"&gt;Boot Linux without password&lt;/h2&gt;
&lt;p&gt;Power on your machine. When grub is ready, select your Linux OS entry and edit it by typing on &lt;code&gt;e&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On this GRUB configuration, search for the line starting with &lt;code&gt;linux /boot/vmlinuz&lt;/code&gt; :&lt;/p&gt;</description></item></channel></rss>