Unverified Commit 1f348d89 authored by Leon Schumacher's avatar Leon Schumacher
Browse files

bloodhound-ce: init at 8.3.1

parent 9816fd20
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
diff --git a/cmd/ui/package.json b/cmd/ui/package.json
index e061ece8e3..e80f144399 100644
--- a/cmd/ui/package.json
+++ b/cmd/ui/package.json
@@ -34,7 +34,7 @@
         "@react-sigma/core": "^3.4.1",
         "@reduxjs/toolkit": "^1.8.5",
         "bh-shared-ui": "workspace:*",
-        "dagrejs": "git@github.com:BloodHoundAD/dagre.git",
+        "dagrejs": "https://github.com/BloodHoundAD/dagre/archive/3e217cedd8c540c10f9282c2f87d9d4f88dd8185.tar.gz",
         "downshift": "^6.1.7",
         "graphology": "^0.25.1",
         "graphology-layout": "^0.6.1",
diff --git a/yarn.lock b/yarn.lock
index d1da73ceb6..f9efa7a893 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4884,7 +4884,7 @@
     "@vitest/coverage-v8": ^2.1.9
     autoprefixer: ^10.4.20
     bh-shared-ui: "workspace:*"
-    dagrejs: "git@github.com:BloodHoundAD/dagre.git"
+    dagrejs: "https://github.com/BloodHoundAD/dagre/archive/3e217cedd8c540c10f9282c2f87d9d4f88dd8185.tar.gz"
     downshift: ^6.1.7
     eslint: ^8.57.0
     eslint-config-prettier: ^9.1.0
@@ -5572,12 +5572,12 @@
   languageName: node
   linkType: hard
 
-"dagrejs@git@github.com:BloodHoundAD/dagre.git":
+"dagrejs@https://github.com/BloodHoundAD/dagre/archive/3e217cedd8c540c10f9282c2f87d9d4f88dd8185.tar.gz":
   version: 1.0.1-pre
-  resolution: "dagrejs@git@github.com:BloodHoundAD/dagre.git#commit=3e217cedd8c540c10f9282c2f87d9d4f88dd8185"
+  resolution: "dagrejs@https://github.com/BloodHoundAD/dagre/archive/3e217cedd8c540c10f9282c2f87d9d4f88dd8185.tar.gz"
   dependencies:
     "@dagrejs/graphlib": 2.1.12
-  checksum: 7c93c58f7f3c32d990f3136ea90802619cf254106755ac8aa09baf3d772b71a39264ce39fa961b1f9b65dcba04b5c229cace129eb74b411087e85f40d7c2008d
+  checksum: 3c6e8873a5598b87ca6adb1da33a0f0a324bae325e946efa08af2e1e138ac48bbe6dbd9ffe9f6026185aa0b71268947237b63e7aceacf603409560bff4998b11
   languageName: node
   linkType: hard
 
+44 −0
Original line number Diff line number Diff line
{
  "@esbuild/aix-ppc64@npm:0.21.5": "97ede19d9e192ba1697ce1d1ea898d7b055605a49f78812abc2c9ee3429d46b30ac0bf064437bbfdf231e4ed484fb1093f30dd65c5f6b21fa3530be1e6ac739b",
  "@esbuild/android-arm64@npm:0.21.5": "46f84da8656aca18906d8d92469b6a9012c08e3b709002e8711160a07ca993c111cf82966b317ee508bbe73e15efec3c4e0211ad74d5ca0e5795bfa19c1163ab",
  "@esbuild/android-arm@npm:0.21.5": "082023508d5e46a81ccb3a8bac3ca693bc3832bcb89a32a8cdfd1d643029381e8d4995a8ebcaece03eeb68ebf3a10c5f11f8604e99ea1d6acb1ca8d4eab2f62c",
  "@esbuild/android-x64@npm:0.21.5": "1141ef28c967dae1b44e921c83bfcc67186d6cde2dcca16909dd34fc84a40852389a99716e603cd348780ade7d9901e054c88a06906e3bfa703f3701d742d86a",
  "@esbuild/darwin-arm64@npm:0.21.5": "50d5d633be3d0fe0fce54c4740171ae6d2e8f5220280a6f6996f234c718de25535e50a31cee1745b5b80f2cc9e336c42c7fc2b49f3ea38b5f3ff5d8c97ef4123",
  "@esbuild/darwin-x64@npm:0.21.5": "7f3657b7e76ea593eea37ac6738ed5cc10e97fda333f1b6c7bbf2f7c2e292e7ffe7fa8f214ffd9298f4a748ac6e421e061605e6a5e87333311fbe33f255f39df",
  "@esbuild/freebsd-arm64@npm:0.21.5": "7efa374aa1a57e6473acda817fcac4b1f9da953a9d945f5a051f7451c1f31ae34af1855b67c3bfcbb8a49e04c10083ec112f3eacaeb0114d3b1a5576bced8fa6",
  "@esbuild/freebsd-x64@npm:0.21.5": "e365444f5ff8b64dfccc065cee72cb30223f8075be0ea4323578a5677bfd9f114935823cebc2d4f40739288a6e46a1c963d7c68cd5b334eac3e7e38eefdaea77",
  "@esbuild/linux-arm64@npm:0.21.5": "cdd25895394a13db376a2c4bff1f800642d5d5c2b502e6b96ed989d5386b5d0c00b437c04fd5ac1e30d71727d2d7382981d51154b2ae27692288a7cc02148f1b",
  "@esbuild/linux-arm@npm:0.21.5": "d08c2f7cf878ef3e0e541dbe8dd4a5ef9cf5f8328ad703353aaf3dfec533e61beb69bb59b6c26022b7ff777c5db39968f4cf60fe4133400e98d1c546a3a0990a",
  "@esbuild/linux-ia32@npm:0.21.5": "274b528e979f87f106ff306793e4a5d788c4d5de14914e25e784e4b7cb67f2da93227e2f65315b66b79e271b48cec4b2442226bd32f139acb77bb4f492cc4de2",
  "@esbuild/linux-loong64@npm:0.21.5": "5016b6ff58667dfa026d6911e5d04a644f56bb0dc8385a84e5ca83eb231d9b570d24d6da79542b94cfd7f164a7da7c40b26c8e7ea32d050d1476035dde1f5c59",
  "@esbuild/linux-mips64el@npm:0.21.5": "540c8e3bdfc380ee07c72b7df3583e0a0c236144cc84ce33b0a906075ac81ab357429023ba2ef4823dd0247edbc7843cfa41b878ae665e62d3d0ef107fdfe27d",
  "@esbuild/linux-ppc64@npm:0.21.5": "929a04c785fa9dcced848b14f060b514418f7e4cde17b12232027dead1ea9fd91b47e080887e6d0a431bb7222f7f0184664edea0f9ae8fe17a611450ff07c52c",
  "@esbuild/linux-riscv64@npm:0.21.5": "ad4d6743d9d266700c9e874bc12787be4425de7ea4f5192863adca27f7cefa583ec573b4e6f1f5cc6dfd9bb3542d9ddbe9c9e661e113da2c54ce4a7296f455a1",
  "@esbuild/linux-s390x@npm:0.21.5": "d5ba16e3d434c109f740d5d31e037c07685b8f989f20eb4295db658057cf03c1363001991258e8d8f523153f7f6e993314ac086b3434acfb067bc39701a54c53",
  "@esbuild/linux-x64@npm:0.21.5": "91c202dca064909b2c56522f98e3a3b24bc5d43405506b4e67923ecb5d0cc2b78dcee8d815f705d71395402f8532670a391777a3cf6a08894049e453becf07a0",
  "@esbuild/netbsd-x64@npm:0.21.5": "f42c8c96699fe3cb5ae258d075d437ebf0cb19bdca3b99431be4377f9dbcb9a154f3106e4e85a587b491f2a5c31e15d58f2b1505de5fc23379bf9c5535db9f2d",
  "@esbuild/openbsd-x64@npm:0.21.5": "7d11f7a371fa438a0e3cf3f6d626e698b773c4f0b2577b0a0b9d303d13ad1cd6821473df0dc96dc09f2cfe12f7502a6011f000292fcf750c1b7b1ad6a93e49ca",
  "@esbuild/sunos-x64@npm:0.21.5": "1d3b0f316fcca3e22b055c1f459b618adea8c70d9ea996845fb231489c7a4f6dde547666b7a257710245f4b312c57c4bc3006789e4a37735ba626aeab069e253",
  "@esbuild/win32-arm64@npm:0.21.5": "eaa7a03d70828e806db8010d497e716c49c3fbd72ab7af3de1604726de1ce292b4441aa4bcaa693fb234d9e0054e81daed6f3e1f794a160282c31be424f45789",
  "@esbuild/win32-ia32@npm:0.21.5": "7a42a116d954eb7920e0713a2cddc605275b36dda91ef34a41d16461d3e1dabad1942742b742c37d0d9d981975445c2acb3cc079628bc415bd94284342c5abe0",
  "@esbuild/win32-x64@npm:0.21.5": "59f53cdd81340d48479bd4998fc2c11c7018964ca4c41efe3e00fa56b94e4b2e11c9606bac6cf92384a2268d2a9f7621a8d441d456ea42200c91f8a38c03e476",
  "@rollup/rollup-android-arm-eabi@npm:4.35.0": "63b8af67e4db20b58719c2e7a4e1a8252e591ce3f621c3b254c80ae413127d18dce7a9ba1be157068efe511af99170d519613ca6e005c273ed1bfb37d46e8d9a",
  "@rollup/rollup-android-arm64@npm:4.35.0": "69f8bcb2123fd201e3db6f828bccec8b2ca3c707b06fd82e0792d1af615214c104b835669601e4dfddf50f77eb3036de8abfe0bb30d2eaa237c3e1006ef10f9c",
  "@rollup/rollup-darwin-arm64@npm:4.35.0": "559080459c32778aa481745f9a3ee35fa6cec2e3d2cd16246515e7554830571b35c8a334f7a264337a9cede422a8f86e94bfb5daf77ecc07fa5d0384f099b767",
  "@rollup/rollup-darwin-x64@npm:4.35.0": "ad7e081f4fe82274cebb89ed34cb6bb7c9e2eb30d03fd4cd2c9d4217c76227ec370d7065a1778791a5fe82d3ee7e9e9a04a77714cf65fe36c9e43202a49198b4",
  "@rollup/rollup-freebsd-arm64@npm:4.35.0": "a685691f78693b8b5052a7fe4fbf89361b2001115b14c14cd156ad84b621e67c7b67171aee05d3a659f4148df31fd9a4460b3ac27627bacbda185fa2576e1f45",
  "@rollup/rollup-freebsd-x64@npm:4.35.0": "6202f1e61d0d92a0232b46a98c6ca9d71782803d2ffe5c7b99b04230ecdc1d822408b2833c5889804c27bb364897708676ed9853e8c4cae19f7ea9a9afa291ef",
  "@rollup/rollup-linux-arm-gnueabihf@npm:4.35.0": "b05e7aee3c388a2902bc282952c3d8ebf7d72a6ecebb44bc76bbcf86c399294f471f59fcaf32750b8ae885f17c6f707f75dc698883aaeb3424e5a9b4a2ff9416",
  "@rollup/rollup-linux-arm-musleabihf@npm:4.35.0": "74fa64b7d9891770ef305f64e7cf10684252819f77e7e6b6bd9480aede21e4a6050989840cb3a3d471b17adf6186755ae11c9c6da31a64c3df362c6b3477ef74",
  "@rollup/rollup-linux-arm64-gnu@npm:4.35.0": "64774108822fe5a03dbfcc956988a6ad649a1de284878b395778fef72fd28103112d30fc4478cad0f8f738fee43a1f9d53847a76a6003881a6850e43c868ce72",
  "@rollup/rollup-linux-arm64-musl@npm:4.35.0": "51c3785b65767c1345359fdf738e88dacfe7394787ec275245e0d2db94b487bfd57c0461b38239afdbc276d8428fe6e688d716c76012c97a4b5ec21f86482cb5",
  "@rollup/rollup-linux-loongarch64-gnu@npm:4.35.0": "42ecbbe666cfbe20c1a6ff81f10318524c0b2cb0aaeda5ad41ce02f13bba29c72352b75b5a0bfe0a600a2e4daeca616e2ad4b874c3066a130612c7e1518c9ffa",
  "@rollup/rollup-linux-powerpc64le-gnu@npm:4.35.0": "00d07f1f4d41ad965554c32aafd7409f651749b62570fbb41442f72264a2df841be37deb9a11409d399727d9c16d740204ae8f280c2f0bbcada5ec65e70a0f61",
  "@rollup/rollup-linux-riscv64-gnu@npm:4.35.0": "1ce600dcd78e5de15f0f10f21c2378c5469250c0fb00c610e1f218a62855a17a425631afffc84e8d526070d82c96980da86aa8b9a8fce400e79cd030027ec995",
  "@rollup/rollup-linux-s390x-gnu@npm:4.35.0": "f0e568e47e2d4675afc139c2d13cb0258ffe08414b8ac75372454c7179f74364fb06504666cf22c824f18e12e5c1dc774a1a2e2bb3201689ec116e4e6e5570db",
  "@rollup/rollup-linux-x64-gnu@npm:4.35.0": "d07781b3fcef75ca3989ff5f179d03a7ca0e93dd478b001557b5950d8883ac2104a63688cbf3d8d085baea4a676d73dd04ef053914e5c8839d6295eb682c06b4",
  "@rollup/rollup-linux-x64-musl@npm:4.35.0": "7052cd1dbf44674da9a57d453435693456ad1cdbf079307f6ff9ceecc92c654c194c7b06a5692f34690bc2f73397d6f7f5dc93710403bff11d4082818d9b4ff4",
  "@rollup/rollup-win32-arm64-msvc@npm:4.35.0": "0259f2acfbc1bfea042e235fbc8d8862e2c06cb394106e16b1ca980e66002d002cc55dc463fedb28feda49375f605d2aa8ceff52e78d4db2ca8e2921a5c89806",
  "@rollup/rollup-win32-ia32-msvc@npm:4.35.0": "2ec41e203aee7eaa42eceb2853c0e7cce0613034d0e086d3eca4073b0565769c674f7563cb0f05d90900cf08bc486b57c16cb184b1e8d68ee57c60fc0a54f18a",
  "@rollup/rollup-win32-x64-msvc@npm:4.35.0": "253b4421e708bde3f848d5165619f0301cd65da6d359ba1f23c6e2a42466d1a793baf35df46fb3574a8a6e74b0439511c397624742dd9abcb3a11256a9599007"
}
+227 −0
Original line number Diff line number Diff line
{
  buildGoModule,
  fetchFromGitHub,
  fetchurl,
  lib,
  makeWrapper,
  nodejs_22,
  p7zip,
  python311,
  runCommand,
  stdenv,
  yarn-berry_3,
}:
let
  inherit (lib) concatLines flip pipe;
  inherit (lib.versions) major minor patch;

  # reference: https://github.com/SpecterOps/BloodHound/blob/v8.3.1/dockerfiles/bloodhound.Dockerfile

  pname = "bloodhound-ce";
  version = "8.3.1";

  src = fetchFromGitHub {
    owner = "SpecterOps";
    repo = "BloodHound";
    tag = "v${version}";
    hash = "sha256-mIoQkxUxv2BktFGSLKo5RVEF/7JByiyCWC2o9GWS9w4=";
  };

  filter = flip pipe [
    (map (x: ''
      mkdir -p "$out/${dirOf x}"
      cp -r "${src}/${x}" "$out/${x}"
    ''))
    concatLines
    (runCommand "filtered-source" { })
  ];

  yarn-berry = yarn-berry_3;

  ##############################################################################

  frontend = stdenv.mkDerivation (finalAttrs: {
    pname = "bloodhound-ce-frontend";
    inherit version;

    src = filter [
      ".yarn/plugins"
      ".yarn/releases"
      ".yarnrc.yml"
      "cmd/ui"
      "constraints.pro"
      "package.json"
      "packages/javascript"
      "yarn-workspaces.json"
      "yarn.lock"
    ];

    patches = [
      # cmd/ui/package.json includes "git@github.com:BloodHoundAD/dagre.git"
      # which is fetched using SSH, and that doesn't work in the Nix sandbox
      # so we just replace it with a standard HTTPS URL
      ./fetch-dagrejs-via-https.patch
    ];

    nativeBuildInputs = [
      nodejs_22
      yarn-berry
      yarn-berry.yarnBerryConfigHook
      python311 # for node-gyp builds
    ];

    missingHashes = ./missing-hashes.json;

    offlineCache = yarn-berry.fetchYarnBerryDeps {
      inherit (finalAttrs) src patches missingHashes;
      hash = "sha256-0OXOZ9QVpOxqE4r1Gj0dOlEijY+JAqOvanntp5D5t1M=";
    };

    env.JOBS = "max";

    buildPhase = ''
      runHook preBuild
      yarn build
      runHook postBuild
    '';

    installPhase = ''
      runHook preInstall
      cp -r cmd/ui/dist $out
      runHook postInstall
    '';
  });

  ##############################################################################

  collectors =
    let
      azver = "v2.8.1";
      shver = "v2.8.0";

      sharphound = fetchurl {
        url = "https://github.com/SpecterOps/SharpHound/releases/download/${shver}/sharphound_${shver}_windows_x86.zip";
        hash = "sha256-BjBOxjhQYpqD/qUy9EsuXplK8JAuPU/LE2O0Ooxr+r4=";
      };
    in
    pipe
      [
        {
          os = "darwin";
          arch = "amd64";
          hash = "sha256-HD5vMc6vt71wj5ST6On417iY3DJZQXdG8Il73H22m9Q=";
        }
        {
          os = "darwin";
          arch = "arm64";
          hash = "sha256-57i+/9gV17pqQqqnEianJdJ6Jtg4DsExMkfAEqaeNns=";
        }
        {
          os = "linux";
          arch = "amd64";
          hash = "sha256-8wrEef0+ik5WAsIV7tInyUlNnsUBw6Ux9LE7gVS3Fhs=";
        }
        {
          os = "linux";
          arch = "arm64";
          hash = "sha256-23lokcbd2Yp9pWibsb5SNW/YE/eHpHCFZv2PbBlw0Xo=";
        }
        {
          os = "windows";
          arch = "amd64";
          hash = "sha256-IkEfEh2VFNTnuUAez6/vMY7sMv4rtDR3Paerev/xoqs=";
        }
        {
          os = "windows";
          arch = "arm64";
          hash = "sha256-qEgmO7oNy/pUXH7lbOoJxNznl2mPofj2R5RGBZdOoUI=";
        }
      ]
      [
        (map (
          x:
          "cp ${
            fetchurl {
              url = "https://github.com/SpecterOps/AzureHound/releases/download/${azver}/azurehound_${azver}_${x.os}_${x.arch}.zip";
              inherit (x) hash;
            }
          } azurehound_${azver}_${x.os}_${x.arch}.zip"
        ))
        concatLines
        (
          copyAzurehoundZips:
          stdenv.mkDerivation {
            pname = "bloodhound-ce-collectors";
            inherit version src;

            nativeBuildInputs = [ p7zip ];

            installPhase = ''
              mkdir -p $out/{azurehound,sharphound}

              ${copyAzurehoundZips}
              7z x 'azurehound_*.zip' '-oartifacts/*'
              (cd artifacts; 7z a -tzip -mx9 $out/azurehound/azurehound-${azver}.zip *)

              cp ${sharphound} $out/sharphound/sharphound-${shver}.zip
              for i in $out/*/*.zip; do sha256sum "$i" > "$i.sha256"; done
            '';
          }
        )
      ];
in
buildGoModule {
  inherit pname version;

  src = filter [
    "cmd/api"
    "go.mod"
    "go.sum"
    "packages/go"
  ];

  nativeBuildInputs = [
    makeWrapper
  ];

  ldflags = [
    "-s"
    "-w"
    "-X github.com/specterops/bloodhound/cmd/api/src/version.majorVersion=${major version}"
    "-X github.com/specterops/bloodhound/cmd/api/src/version.minorVersion=${minor version}"
    "-X github.com/specterops/bloodhound/cmd/api/src/version.patchVersion=${patch version}"
  ];

  subPackages = [
    "cmd/api/src/cmd/bhapi"
  ];

  vendorHash = "sha256-Lm6g0pxGVIuns6mUwnkbnBQQQp1V0TvEakX5fAo8qMo=";

  preBuild = ''
    rm -rf            cmd/api/src/api/static/assets
    cp -r ${frontend} cmd/api/src/api/static/assets
  '';

  postInstall = ''
    mv $out/bin/{bhapi,bloodhound-ce}

    wrapProgram $out/bin/bloodhound-ce \
      --set BHE_COLLECTORS_BASE_PATH ${collectors}
  '';

  passthru = {
    inherit frontend collectors;
  };

  meta = with lib; {
    description = "Six Degrees of Domain Admin";
    homepage = "https://github.com/SpecterOps/BloodHound";
    changelog = "https://github.com/SpecterOps/BloodHound/releases/tag/v${version}";
    downloadPage = "https://github.com/SpecterOps/BloodHound/releases";
    license = licenses.asl20;
    platforms = platforms.linux;
    maintainers = with maintainers; [ eleonora ];
    mainProgram = "bloodhound-ce";
  };
}