<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Pyro Engineering</title><description>Pyro develops gaming&apos;s most advanced software. We&apos;re makers at heart, and this is our story.</description><link>https://pyro.engineering/</link><item><title>Modrinth Servers February Release</title><link>https://pyro.engineering/posts/2025-02-10-modrinth-servers-february-release/</link><guid isPermaLink="true">https://pyro.engineering/posts/2025-02-10-modrinth-servers-february-release/</guid><description>We&apos;ve been working hard to make the Modrinth Servers experience the best it can be. Here&apos;s what&apos;s new and improved in your panel!</description><pubDate>Mon, 10 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You can now search and filter through your server&amp;#39;s console in the Overview tab, jump to specific results to see the log in context, select them, and copy them.&lt;/li&gt;
&lt;li&gt;You can now drag and select any number of lines in the console, copy them. and view them formatted.&lt;/li&gt;
&lt;li&gt;Hide your server&amp;#39;s modrinth.gg custom URL using the new &lt;strong&gt;Hide subdomain label&lt;/strong&gt; toggle in Options &amp;gt; Preferences.&lt;/li&gt;
&lt;li&gt;The Content page has been updated to make managing your server&amp;#39;s mods and plugins easier than ever. Now, only versions that are available for your server&amp;#39;s Minecraft version and platform are shown by default, and you can now show beta and alpha versions in the selector.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Improvements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The Overview page loads faster.&lt;/li&gt;
&lt;li&gt;The Options &amp;gt; Properties page loads faster.&lt;/li&gt;
&lt;li&gt;The server hardware graphs in the Overview page have been rewritten to improve power efficiency and fix rendering bugs.&lt;/li&gt;
&lt;li&gt;The modpack selector in Options &amp;gt; Platform now shows more information about a modpack, like its tags, downloads, and followers.&lt;/li&gt;
&lt;li&gt;Reinstalling your server no longer requires the browser to refresh the page in order to work properly. We now also lock more options while a server installs to prevent your server from bricking itself.&lt;/li&gt;
&lt;li&gt;The server console has been rewritten to implement proper batching. All performance issues with the console previously have now been fixed.&lt;/li&gt;
&lt;li&gt;An error state has been added in the server list if servers are unable to be fetched.&lt;/li&gt;
&lt;li&gt;Sorting in the Files tab is now accessible by clicking the column headers.&lt;/li&gt;
&lt;li&gt;Backing up a server and erasing all its data simultaneously in the Platform page now works as expected.&lt;/li&gt;
&lt;li&gt;Opening a platform modal, then opening another, no longer causes versions of that platform to fail to load.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks everyone for your support, your feedback, and your patience. We work 24/7 to keep your servers running smoothly and to make sure we have capacity for all of you. As always, if you ever need help with anything simply send us a message through the chat in the bottom right corner of your server&amp;#39;s panel and we&amp;#39;ll get it fixed ASAP!&lt;/p&gt;
</content:encoded><author>Amy</author></item><item><title>Modrinth Servers Security Incident</title><link>https://pyro.engineering/posts/january-modrinth-servers-security-incident/</link><guid isPermaLink="true">https://pyro.engineering/posts/january-modrinth-servers-security-incident/</guid><pubDate>Fri, 24 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We have posted our &lt;a href=&quot;/posts/january-modrinth-servers-security-transparency-report&quot;&gt;transparency report&lt;/a&gt; detailing the incident and our response. The post below remains for historical purposes.&lt;/p&gt;
&lt;h2&gt;What happened?&lt;/h2&gt;
&lt;p&gt;On January 20, 2025, a malicious threat actor gained unauthorized access to Pyro&amp;#39;s infrastructure platform via a compromised GitHub Personal Access Token. During the breach, the actor had access to the database containing Modrinth Servers customer data. Modrinth user data (hosted by Modrinth) and Modrinth Servers data (hosted by Pyro) are separate from each other, and no part of Modrinth, like user data, billing information, and content were compromised.&lt;/p&gt;
&lt;p&gt;The threat actor had access to server names server IDs, server IPs and ports, server subdomains, general server metadata (mod loader, installed modpacks, Minecraft version), backups metadata, and SFTP credentials, which have been reset for all Modrinth Servers. Three customer servers were directly accessed by updating the owner to a Modrinth account controlled by the threat actor. We have proactively contacted the customers affected and have already secured their servers.&lt;/p&gt;
&lt;p&gt;As of today, January 25, we have fully resolved this security incident. We are no longer experiencing, nor expect to experience, any operational disruption to Modrinth Servers. We have no evidence that there is any malware or continued unauthorized activity within the platform. Outside of database access and certain dangerous APIs which were disabled immediately in response, the threat actor&amp;#39;s access was limited at every step of the incident. As a result, the vast majority of customers data were not accessed by the threat actor. Pyro will be releasing a transparency report, including a full timeline of events, root cause, and a detailed log of our security response, within the week.&lt;/p&gt;
&lt;p&gt;All Modrinth Servers customers will have their service extended by two weeks at our expense as a result of this incident. Please contact support if you have any further concerns and our team will get back to you right away.&lt;/p&gt;
</content:encoded><author>Pyro</author></item><item><title>Modrinth Servers Security Incident - Transparency Report</title><link>https://pyro.engineering/posts/january-modrinth-servers-security-transparency-report/</link><guid isPermaLink="true">https://pyro.engineering/posts/january-modrinth-servers-security-transparency-report/</guid><description>A detailed report on the timeline, causes, and mitigations of the recent Modrinth Servers security incident.</description><pubDate>Fri, 31 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;On January 20th, 2025, Modrinth was alerted that three users&amp;#39; servers had been compromised, seemingly by the same person. Initially, it appeared their accounts had been hijacked, however, closer inspection revealed a deeper compromise of our infrastructure. In the following days, more holes were punched through Pyro&amp;#39;s systems, leading to the attacker mass renaming backups and gaining access to our production servers and private GitHub repositories. We&amp;#39;ve hardened our security systems as a response, and as of January 25th, 2025, have no evidence the attacker has access to any part of our infrastructure.&lt;/p&gt;
&lt;p&gt;The attacker had access to server IDs, IPs, ports, server metadata (server names, backup names, modloader information), server data, and our private code repositories. &lt;strong&gt;The attacker did NOT have access to billing information, Modrinth accounts, or Modrinth&amp;#39;s infrastructure.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With the goal of providing transparency after this incident, we&amp;#39;ll explain how our systems operate, detail the course of events, and outline the steps we have taken to mitigate the damage and reinforce our security.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;How Our Infrastructure Operates&lt;/h2&gt;
&lt;p&gt;Pyro runs all servers on NixOS, a system designed for reproducible environments. Every server uses nearly identical configurations to simplify updates and maintain consistency. These configurations are stored in a private repository we call supercluster.&lt;/p&gt;
&lt;p&gt;Historically, to manage deployments, we relied on a special user, “robot.” This user had privileged (root-level) access to our management server, allowing us to push new configurations rapidly across all machines. While useful for quick rollouts, this design meant anyone possessing the robot user’s credentials could gain full access to our infrastructure.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Early Clues of a Breach&lt;/h2&gt;
&lt;p&gt;The first sign of trouble appeared on January 20th, when a user reported that someone had taken over their server. Despite helping them secure their account by resetting passwords and enabling two-factor authentication, we noticed repeated break-ins. Even more concerning, the control panel showed the server’s owner had changed to an unknown Modrinth account, locking the rightful user out.&lt;/p&gt;
&lt;p&gt;We initially believed this to be a one-off incident, perhaps caused by a compromised user password, but the facts soon suggested otherwise. By January 21st, investigation revealed no API route or typical user-level exploit that could account for such persistent ownership changes. Our suspicion of a larger infrastructure breach prompted a broad internal review of logs, endpoints, and code.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Initial Mitigations&lt;/h2&gt;
&lt;p&gt;Our database used to be self-managed on the same server our backend API is running from. In an attempt to shield our critical data, concerned the attacker had gained database access, we decided to migrate it to Neon DB. The assumption was that moving the database offsite, along with updating and revoking key credentials, would isolate or at least contain any ongoing attack. We increased backup frequency, hardened database access through IP whitelist and ensured our NeonDB account was secured.&lt;/p&gt;
&lt;p&gt;Nevertheless, more reports of hijacked servers came in, confirming that something far more serious was happening. By January 23rd, it had become clear we were dealing with a sophisticated intrusion rather than a simple user account compromise.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Further Evidence of a Large Scale Breach&lt;/h2&gt;
&lt;p&gt;On January 24th, all doubts were erased when we discovered that more than 3,000 server backups had been renamed to racist slurs within the span of a single minute. No minor exploit or user-end weakness could account for such an immediate and large-scale alteration. It was unmistakable: the attackers had access to our database.&lt;/p&gt;
&lt;p&gt;At this point, we had rotated our internal secrets several times already, such as the backend API&amp;#39;s master key. We locked down our APIs, specifically deletion endpoints, limiting the damage the attacker could deal and stopped pushing updated secrets to our repositories.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;The Real Culprit: A Compromised SSH Key (and a Hidden Token)&lt;/h2&gt;
&lt;p&gt;After digging in our management server, it became evident the &amp;quot;robot&amp;quot; SSH key had been leaked.&lt;/p&gt;
&lt;p&gt;We found a work-in-progress software meant to automate NixOS deployments—an unfinished system not yet ready for production. In order for this software to clone and update certain repositories, it had a plain-text, unscoped GitHub Personal Access Token (PAT) stored locally, granting full read access to our private repositories, including supercluster, where many credentials and keys lived unencrypted. Every time we rotated database passwords or API keys, the attacker re-pulled supercluster using the stolen PAT to discover the latest information.&lt;/p&gt;
&lt;p&gt;We came to the conclusion the attacker used the leaked SSH key to gain access to our management server, found the insecure PAT, and used it to keep control over our infrastructure.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Containment and Cleanup&lt;/h2&gt;
&lt;p&gt;Realizing that the unscoped PAT was the real “open gate” into our infrastructure, we immediately revoked it, along with any other lingering personal access tokens. We severed the “robot” user’s SSH privileges, regenerated new keys, and removed the incomplete deployment tool from the management server altogether.&lt;/p&gt;
&lt;p&gt;Once that pathway was closed, the attacker could no longer reacquire our secrets, effectively halting their infiltration. We then launched a thorough internal audit to ensure no other unexpected tokens or processes were left behind. Each server’s logs were scrutinized, suspicious files removed, new monitoring and alert systems put in place, and we kept a close eye on SSH logs. Since these measures were enacted, there have been no further signs of unauthorized access.&lt;/p&gt;
&lt;p&gt;On January 25th, the attacker reached out to us, requesting 1 ETH within the hour (eventually lowering to 0.25 ETH, and extending the delay by multiple hours) in exchange for not leaking Pyro&amp;#39;s private codebases, our CEO&amp;#39;s private codebases, and doing further damage to our infrastructure. At that time, there was no evidence the attacker had access to our infrastructure despite claiming otherwise. We have not, and will not, pay the attacker.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Lessons Learned and Steps Forward&lt;/h2&gt;
&lt;p&gt;This incident has highlighted many points of failure in our security systems, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The &amp;quot;robot&amp;quot; SSH key granting root access to every node in our network.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improperly stored secrets, acquirable if any infrastructure team member had their GitHub account compromised.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Poor internal diligence with handling critical secrets.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Absence of a proper response plan for security incidents.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It also sparked a greater conversation about security at Pyro and Modrinth: we are working closely together to ensure such a breach never happens again and detailing a response plan for future security events, including improving our transparency and response effectiveness.&lt;/p&gt;
&lt;p&gt;As of now, the following improvements are being implemented:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Personal Security Overhaul: Every infrastructure team and management team member went through their personal security and ensured they were protected against targeted attacks, including resetting our computers, rotating critical passwords, ensuring 2FA is enabled everywhere and securely storing our SSH keys. Future measures may include storing keys exclusively in hardware tokens, such as YubiKeys.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Individualized Credentials: We&amp;#39;ve replaced the &amp;quot;robot&amp;quot; key with unique access for each trusted user, and are working on solutions to additionally restrict and log SSH access.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vaulting Secrets: Keeping secrets in plaintext is unacceptable. We&amp;#39;re now storing them encrypted only and ensuring only trusted people have access to them, and working on further solidifying secret access through idP and SSO software. Furthermore, secrets are scoped exclusively to the nodes that require them, preventing a leak of management secrets on customer nodes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hardened Monitoring: Through our analysis during the security incident, we noticed many areas where we lacked logging and monitoring. We should&amp;#39;ve noticed the malicious SSH logins and database modifications sooner. We&amp;#39;re evaluating our options to integrate improved monitoring and runtime security tooling with our existing alerting systems, and implementing full auditing and centralized logging across all nodes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cultural Changes at Pyro: This incident highlights our lack of focus on security and safety. We&amp;#39;re determined to engage in thorough security review within our company in the future, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Detailing a security emergency response plan alongside Modrinth, with steps to take in the case of an intrusion such as revoking secrets and immediately notifying our customers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rotating secrets and ensuring previous Pyro employees lose all infrastructure access to avoid disastrous leaks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Undergoing 3rd-party security auditing the moment it is financially viable for us.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ever since this incident, our primary focus has been on security. We&amp;#39;ll post a follow-up, including further steps we took to protect our customers, early next month.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Supporting Our Community&lt;/h2&gt;
&lt;p&gt;We recognize that some users experienced a total loss of control over their servers, and others saw vile, hateful changes to their data. For this, we extend our deepest apologies. We have taken steps to restore every compromised server and remove any malicious alterations such as renamed backups, and fully refunded affected customers who wished so.&lt;/p&gt;
&lt;p&gt;Modrinth and Pyro are extending everyone&amp;#39;s subscription by 2 weeks, free of charge. This means your next server bill will be delayed by 2 weeks. No action is required to receive this.&lt;/p&gt;
&lt;p&gt;If you notice any irregularity with your server or simply have concerns about the security of your account, please reach out to our support team. We remain committed to transparency, and we promise to keep you informed if any further revelations come to light.&lt;/p&gt;
&lt;p&gt;While this incident posed a serious challenge to our entire platform, it has reinforced our determination to maintain a resilient and secure environment for the Modrinth community. We are grateful for your patience and will continue to work diligently to protect our users, their servers, and their data.&lt;/p&gt;
&lt;p&gt;— The Pyro Engineering Team&lt;/p&gt;
</content:encoded><author>Pyro</author></item><item><title>Our Journey and the Future of Pyrodactyl</title><link>https://pyro.engineering/posts/our-journey-and-the-future-of-pyrodactyl/</link><guid isPermaLink="true">https://pyro.engineering/posts/our-journey-and-the-future-of-pyrodactyl/</guid><pubDate>Mon, 12 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import Figure from &amp;quot;../../components/posts/figure.astro&amp;quot;;&lt;/p&gt;
&lt;h2&gt;Our Journey&lt;/h2&gt;
&lt;p&gt;At Pyro, we began with a simple yet powerful belief: open-source software can reshape industries and empower communities. This belief became the cornerstone of our mission to revolutionize hosting. From the start, we aimed to create the most advanced fork of Pterodactyl, pushing the boundaries of what’s possible in hosting.&lt;/p&gt;
&lt;p&gt;Our journey was challenging. We spent over six months meticulously rebuilding the core components of the panel. Every line of code was scrutinized, every feature optimized, and every pixel designed with precision. As Pyro grew, so did our vision. We realized we were no longer content with refining what already existed; we wanted to break new ground.&lt;/p&gt;
&lt;p&gt;This drive led us to explore new technologies and methodologies, challenging the legacy systems that had long constrained the industry. The Pterodactyl fork was our launching pad, but it was not our final destination.&lt;/p&gt;
&lt;h2&gt;The Decision to Relicense&lt;/h2&gt;
&lt;p&gt;In alignment with our core values of transparency and community empowerment, we have chosen to relicense Pyrodactyl under the GNU Affero General Public License version 3 (AGPLv3). This decision reflects our deep commitment to open-source principles and ensures that Pyrodactyl remains free and accessible.&lt;/p&gt;
&lt;p&gt;We chose the AGPLv3 license because it:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mandates that modifications, improvements, or derivative works are shared with the community&lt;/li&gt;
&lt;li&gt;Ensures the hosting industry continues to benefit from collective advancements&lt;/li&gt;
&lt;li&gt;Prevents the monopolization of innovations emerging from Pyrodactyl&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Our choice of AGPLv3 came after carefully considering how best to protect Pyrodactyl’s integrity while encouraging widespread collaboration. We wanted to create a framework where developers, companies, and enthusiasts could contribute to the project, knowing their work would benefit the entire community.&lt;/p&gt;
&lt;h2&gt;Empowering the Community&lt;/h2&gt;
&lt;p&gt;To truly innovate and lead the industry forward, we recognized the need to free ourselves from legacy frameworks and embrace the collective intelligence of the community. This realization led us to an important decision: it was time for Pyrodactyl to become a community-driven project.&lt;/p&gt;
&lt;p&gt;We believe that by handing over the reins to the community, we can foster an environment where creativity and innovation thrive without limitations. This transition represents a significant step in our broader strategy to push the boundaries of what’s possible in hosting.&lt;/p&gt;
&lt;p&gt;In conjunction with relicensing, we are transitioning Pyrodactyl’s development to a community-driven model. We have granted multiple community members maintainer access to the Pyrodactyl repository, giving them the authority to steer the project in new directions and ensure its continued growth and success.&lt;/p&gt;
&lt;p&gt;This transition reflects our broader vision for the future of hosting. We see this as the final frontier—a space where possibilities are endless, and the only limits are those we impose on ourselves. By opening up Pyrodactyl to the community, we are breaking down those limits and inviting everyone to contribute to the evolution of hosting technology.&lt;/p&gt;
&lt;h2&gt;Looking Ahead&lt;/h2&gt;
&lt;p&gt;As we embark on this new chapter for Pyro, we are filled with excitement and anticipation for what the future holds. Our commitment to open-source principles remains as strong as ever, and we are already hard at work on groundbreaking projects that will redefine the hosting industry.&lt;/p&gt;
&lt;p&gt;We&amp;#39;re not just refining what exists – we&amp;#39;re completely reimagining the future of hosting. Our team is developing a revolutionary new platform built from the ground up, incorporating cutting-edge technologies and a fresh, intuitive design. This isn&amp;#39;t just an improvement; it&amp;#39;s a paradigm shift in how hosting services are delivered and managed.&lt;/p&gt;
&lt;p&gt;Let us be clear: Pyro is here to stay. We&amp;#39;re not going anywhere. In fact, we&amp;#39;re doubling down on our commitment to the hosting industry and our community. The transition of Pyrodactyl to a community-driven project is just the beginning. It lays the foundation for our next phase of growth and innovation.&lt;/p&gt;
&lt;p&gt;We invite you to join us on this exciting journey. Whether you&amp;#39;re a developer, a company, or an enthusiast, there&amp;#39;s a place for you in our community. Together, we&amp;#39;ll push the boundaries of what&amp;#39;s possible in hosting, creating solutions that are more powerful, more accessible, and more aligned with the needs of users and businesses alike.
Thank you for being a part of this chapter in our story. The best is yet to come, and we can&amp;#39;t wait to shape the future of hosting with you by our side.&lt;/p&gt;
&lt;Figure
  image=&quot;/posts/nexus.png&quot;
  alt=&quot;Pre-release screenshot of a server interface&quot;
  caption=&quot;Pre-release screenshot of a server interface. Subject to change.&quot;
/&gt;</content:encoded><author>Elizabeth</author></item></channel></rss>