openresty
tcp/443 tcp/80
The following URL (usually /.git/config) is publicly accessible and is leaking source code and repository configuration.
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a6522ea090368
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = git@git.sr.ht:~cmt/cmt.srht.site fetch = +refs/heads/*:refs/remotes/origin/* [branch "main"] remote = origin merge = refs/heads/main
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a65221cf09cf8
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://git.sr.ht/~cmt/cmt.srht.site fetch = +refs/heads/*:refs/remotes/origin/* [branch "main"] remote = origin merge = refs/heads/main
Exposing Swagger/OpenAPI documentation is primarily a risk if your API has underlying security flaws, as it gives attackers a precise roadmap to find them.
Those detail every endpoint, parameter, and data model, making it easier to discover and exploit vulnerabilities like broken access control or injection points.
While a perfectly secure API mitigates the danger, protecting your documentation is a critical layer of defense that forces attackers to work without a map.
Severity: info
Fingerprint: 5733ddf49ff49cd1bf890109bf890109bf890109bf890109bf890109bf890109
Public Swagger UI/API detected at path: /api-docs/swagger.json
Exposing Swagger/OpenAPI documentation is primarily a risk if your API has underlying security flaws, as it gives attackers a precise roadmap to find them.
Those detail every endpoint, parameter, and data model, making it easier to discover and exploit vulnerabilities like broken access control or injection points.
While a perfectly secure API mitigates the danger, protecting your documentation is a critical layer of defense that forces attackers to work without a map.
Severity: info
Fingerprint: 5733ddf49ff49cd1bf890109bf890109bf890109bf890109bf890109bf890109
Public Swagger UI/API detected at path: /api-docs/swagger.json
Open service 46.23.81.157:443 · thackston.dev
2026-01-22 23:14
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Request-Methods: GET, HEAD, OPTIONS
Content-Length: 1372
Content-Security-Policy: default-src 'self' data: blob:; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; worker-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob:; frame-src https:; img-src data: https:; media-src https:; object-src 'none'; sandbox allow-downloads allow-forms allow-modals allow-pointer-lock allow-popups allow-presentation allow-same-origin allow-scripts;
Content-Type: text/html; charset=utf-8
Last-Modified: Thu, 08 Jan 2026 21:44:55 GMT
Vary: Accept-Encoding
Date: Thu, 22 Jan 2026 23:14:14 GMT
Connection: close
Page title: ~
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>~</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<div class="bio">
<h2>About</h2>
<p>Hi! This is my basic little landing page for my PGP key, contact info, as well as links to my various git sites.
I am an IT professional by day, and an open source enthusiast by night. I have a particular fondness for cryptography
and security. I also run various servers! Please feel free to reach out if you have any questions or just wanna chat!</p>
</div>
<div class="contact">
<h2>Contact Information</h2>
<ul>
<li><strong>Email:</strong> <a href="mailto:christian@thackston.dev">christian@thackston.dev</a></li>
<li><strong>Sourcehut:</strong> <a href="https://git.sr.ht/~cmt">cmt</a></li>
<li><strong>PGP Fingerprint:</strong> 2340 F683 A6F2 2D39 215F 6C19 917A 4842 9BFE 2CB4</li>
<li><a href="key.asc" class="button" download>Download PGP Key</a> <small>(always verify key fingerprint; I don't use keyservers)</small></li>
<li><small>My key fingerprint can also be found in my Sourcehut bio and in my email signature.</small></li>
</ul>
</div>
</div>
</body>
</html>
Open service 47.25.102.188:80 · audiobooks.thackston.dev
2026-01-21 18:21
HTTP/1.1 200 OK
Server: openresty
Date: Wed, 21 Jan 2026 18:22:01 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 4136
Connection: close
Content-Security-Policy: frame-ancestors 'self'
Referrer-Policy: no-referrer
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Tue, 23 Dec 2025 22:55:16 GMT
ETag: W/"1028-19b4d6c8420"
X-Served-By: audiobooks.thackston.dev
Page title: Audiobookshelf
<!doctype html>
<html lang="en" data-n-head="%7B%22lang%22:%7B%221%22:%22en%22%7D%7D">
<head>
<meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content=""><meta data-n-head="1" data-hid="robots" name="robots" content="noindex"><meta data-n-head="1" data-hid="charset" charset="utf-8"><meta data-n-head="1" data-hid="mobile-web-app-capable" name="mobile-web-app-capable" content="yes"><meta data-n-head="1" data-hid="apple-mobile-web-app-capable" name="apple-mobile-web-app-capable" content="yes"><meta data-n-head="1" data-hid="apple-mobile-web-app-status-bar-style" name="apple-mobile-web-app-status-bar-style" content="black"><meta data-n-head="1" data-hid="apple-mobile-web-app-title" name="apple-mobile-web-app-title" content="Audiobookshelf"><meta data-n-head="1" data-hid="theme-color" name="theme-color" content="#232323"><meta data-n-head="1" data-hid="og:type" name="og:type" property="og:type" content="website"><meta data-n-head="1" data-hid="og:title" name="og:title" property="og:title" content="Audiobookshelf"><meta data-n-head="1" data-hid="og:site_name" name="og:site_name" property="og:site_name" content="Audiobookshelf"><title>Audiobookshelf</title><link data-n-head="1" rel="icon" type="image/x-icon" href="/audiobookshelf/favicon.ico"><link data-n-head="1" rel="apple-touch-icon" href="/audiobookshelf/ios_icon.png"><link data-n-head="1" data-hid="shortcut-icon" rel="shortcut icon" href="/audiobookshelf/icon.svg"><link data-n-head="1" data-hid="apple-touch-icon" rel="apple-touch-icon" href="/audiobookshelf/icon192.png" sizes="any"><link data-n-head="1" rel="manifest" href="/audiobookshelf/_nuxt/manifest.2f7e41c6.json" data-hid="manifest"><base href="/audiobookshelf/"><link rel="preload" href="/audiobookshelf/_nuxt/3ef2023.js" as="script"><link rel="preload" href="/audiobookshelf/_nuxt/19fa580.js" as="script"><link rel="preload" href="/audiobookshelf/_nuxt/84edffa.js" as="script"><link rel="preload" href="/audiobookshelf/_nuxt/5ac40cc.js" as="script">
</head>
<body>
<div id="__nuxt"><style>#nuxt-loading{background:#fff;visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #000;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style> <script>window.addEventListener("error",(function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")}))</script> <div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div> </div><script>window.__NUXT__={config:{version:"2.32.1",routerBasePath:"/audiobookshelf",_app:{basePath:"/audiobookshelf/",assetsPath:"/audiobookshelf/_nuxt/",cdnURL:null}}}</script>
<script src="/audiobookshelf/_nuxt/3ef2023.js"></script><script src="/audiobookshelf/_nuxt/19fa580.js"></script><script src="/audiobookshelf/_nuxt/84edffa.js"></script><script src="/audiobookshelf/_nu
Open service 47.25.102.188:443 · audiobooks.thackston.dev
2026-01-21 18:21
HTTP/1.1 200 OK
Server: openresty
Date: Wed, 21 Jan 2026 18:22:01 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 4136
Connection: close
Content-Security-Policy: frame-ancestors 'self'
Referrer-Policy: no-referrer
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Tue, 23 Dec 2025 22:55:16 GMT
ETag: W/"1028-19b4d6c8420"
X-Served-By: audiobooks.thackston.dev
Page title: Audiobookshelf
<!doctype html>
<html lang="en" data-n-head="%7B%22lang%22:%7B%221%22:%22en%22%7D%7D">
<head>
<meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content=""><meta data-n-head="1" data-hid="robots" name="robots" content="noindex"><meta data-n-head="1" data-hid="charset" charset="utf-8"><meta data-n-head="1" data-hid="mobile-web-app-capable" name="mobile-web-app-capable" content="yes"><meta data-n-head="1" data-hid="apple-mobile-web-app-capable" name="apple-mobile-web-app-capable" content="yes"><meta data-n-head="1" data-hid="apple-mobile-web-app-status-bar-style" name="apple-mobile-web-app-status-bar-style" content="black"><meta data-n-head="1" data-hid="apple-mobile-web-app-title" name="apple-mobile-web-app-title" content="Audiobookshelf"><meta data-n-head="1" data-hid="theme-color" name="theme-color" content="#232323"><meta data-n-head="1" data-hid="og:type" name="og:type" property="og:type" content="website"><meta data-n-head="1" data-hid="og:title" name="og:title" property="og:title" content="Audiobookshelf"><meta data-n-head="1" data-hid="og:site_name" name="og:site_name" property="og:site_name" content="Audiobookshelf"><title>Audiobookshelf</title><link data-n-head="1" rel="icon" type="image/x-icon" href="/audiobookshelf/favicon.ico"><link data-n-head="1" rel="apple-touch-icon" href="/audiobookshelf/ios_icon.png"><link data-n-head="1" data-hid="shortcut-icon" rel="shortcut icon" href="/audiobookshelf/icon.svg"><link data-n-head="1" data-hid="apple-touch-icon" rel="apple-touch-icon" href="/audiobookshelf/icon192.png" sizes="any"><link data-n-head="1" rel="manifest" href="/audiobookshelf/_nuxt/manifest.2f7e41c6.json" data-hid="manifest"><base href="/audiobookshelf/"><link rel="preload" href="/audiobookshelf/_nuxt/3ef2023.js" as="script"><link rel="preload" href="/audiobookshelf/_nuxt/19fa580.js" as="script"><link rel="preload" href="/audiobookshelf/_nuxt/84edffa.js" as="script"><link rel="preload" href="/audiobookshelf/_nuxt/5ac40cc.js" as="script">
</head>
<body>
<div id="__nuxt"><style>#nuxt-loading{background:#fff;visibility:hidden;opacity:0;position:absolute;left:0;right:0;top:0;bottom:0;display:flex;justify-content:center;align-items:center;flex-direction:column;animation:nuxtLoadingIn 10s ease;-webkit-animation:nuxtLoadingIn 10s ease;animation-fill-mode:forwards;overflow:hidden}@keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}@-webkit-keyframes nuxtLoadingIn{0%{visibility:hidden;opacity:0}20%{visibility:visible;opacity:0}100%{visibility:visible;opacity:1}}#nuxt-loading>div,#nuxt-loading>div:after{border-radius:50%;width:5rem;height:5rem}#nuxt-loading>div{font-size:10px;position:relative;text-indent:-9999em;border:.5rem solid #f5f5f5;border-left:.5rem solid #000;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);-webkit-animation:nuxtLoading 1.1s infinite linear;animation:nuxtLoading 1.1s infinite linear}#nuxt-loading.error>div{border-left:.5rem solid #ff4500;animation-duration:5s}@-webkit-keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nuxtLoading{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}</style> <script>window.addEventListener("error",(function(){var e=document.getElementById("nuxt-loading");e&&(e.className+=" error")}))</script> <div id="nuxt-loading" aria-live="polite" role="status"><div>Loading...</div></div> </div><script>window.__NUXT__={config:{version:"2.32.1",routerBasePath:"/audiobookshelf",_app:{basePath:"/audiobookshelf/",assetsPath:"/audiobookshelf/_nuxt/",cdnURL:null}}}</script>
<script src="/audiobookshelf/_nuxt/3ef2023.js"></script><script src="/audiobookshelf/_nuxt/19fa580.js"></script><script src="/audiobookshelf/_nuxt/84edffa.js"></script><script src="/audiobookshelf/_nu