Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
gha-lab-ed7a1740c4 — 보안 연구 랩: NationalSecurityAgency/emissary의 고정 스냅샷을 대상으로 GHSA-3g6g-gq4r-xjm9 / CVE-2026-35580(GitHub Actions workflow_dispatch 입력 셸 인젝션)의 통제된 재현 | Kitploit
도구/GitHubGitHub/pvharmo2/gha-lab-ed7a1740c4
Vulnerability AnalysisExploitationLearning & EducationCurated Resources
GitHubpvharmo2/gha-lab-ed7a1740c4

gha-lab-ed7a1740c4

보안 연구 랩: NationalSecurityAgency/emissary의 고정 스냅샷을 대상으로 GHSA-3g6g-gq4r-xjm9 / CVE-2026-35580(GitHub Actions workflow_dispatch 입력 셸 인젝션)의 통제된 재현

저장소 보기
3시간 33분 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

자동화된 연구 산출물 — 업스트림 프로젝트가 아님.

이 저장소는 Université Laval의 석사 논문에서 게시된 GitHub Actions 워크플로우 취약점 재현을 위해 자동화된 하네스가 구축한 일회용 실험실입니다. 이는 NationalSecurityAgency/emissary의 커밋 898488b489615581ea66d17954742c8e4ffb0323(2026-01-09) 시점의 그대로의 스냅샷으로, 해당 프로젝트의 자체 라이선스에 따라 재배포되며, 해당 라이선스 파일은 이 스냅샷에 변경 없이 포함되어 있습니다.

업스트림 프로젝트는 관여하지 않으며, 결코 대상이 되지 않고, 여기서 연구된 취약점은 이미 공개된 상태입니다. 이 저장소의 모든 비밀과 변수는 무작위로 생성된 더미 값입니다 — 실제 자격 증명은 존재하지 않습니다. 액션 참조와 러너 이미지는 2026-01-09에 확인된 값으로 고정되어 있습니다. 스냅샷에 적용된 모든 변경 사항은 하네스 출력의 pinning.md를 참조하십시오.

질문 또는 이의 제기: [email protected]


Emissary Dark Knight - some code just wants to watch the core burn

License Maven Central Java CI with Maven

CodeQL
Lint Codebase

목차

  • 소개
  • 최소 요구 사항
  • 시작하기
  • 문의하기

소개

Emissary는 이기종의, 잠재적으로 광범위하게 분산된, 다중 계층 P2P 컴퓨팅 리소스 네트워크에서 실행되는 P2P 기반 데이터 중심 워크플로우 엔진입니다. 워크플로우 경로는 기존 워크플로우 엔진처럼 사전에 계획되지 않으며, 데이터에 대한 더 많은 정보가 발견됨에 따라 경로가 발견됩니다. Emissary 워크플로우에는 일반적으로 사용자 상호작용이 없으며, 데이터는 완료 상태에 도달할 때까지 목표 지향적인 방식으로 처리됩니다.

Emissary는 고도로 구성 가능하지만, 이 기본 구현에서는 거의 아무것도 수행하지 않습니다. 이 프레임워크의 사용자는 emissary.core.IBaseDataObject 페이로드에 대해 작업을 수행하는 emissary.place.ServiceProviderPlace를 확장하는 클래스를 제공해야 합니다.

다양한 작업을 수행할 수 있으며 워크플로우는 단계별로 관리됩니다. 예: STUDY, ID, COORDINATE, TRANSFORM, ANALYZE, IO, REVIEW.

워크플로우를 지시하는 클래스는 emissary.core.MobileAgent 및 이로부터 파생된 클래스로, 관련 페이로드 객체 집합의 경로를 워크플로우를 통해 관리하며, emissary.directory.DirectoryPlace는 사용 가능한 서비스, 비용 및 품질을 관리하고 P2P 네트워크를 연결 상태로 유지합니다.

GitHub Pages에서 호스팅되는 Maven 사이트 및 Javadoc: https://code.nsa.gov/emissary/

최소 요구 사항

  • Linux 또는 MacOSX 운영 체제
  • JDK 11
  • Apache Maven 3.6.3+

시작하기

필요한 구성 요소 설치, 소스 코드 가져오기, Emissary 빌드 및 실행에 대한 정보는 DEVELOPING.md 가이드를 읽어보십시오.

빌드

Emissary를 컴파일, 테스트 및 패키징하려면 mvn clean package를 실행하십시오.

root@kitploit:~
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.132 s
[INFO] Finished at: 2022-01-10T22:31:05Z
[INFO] ------------------------------------------------------------------------

실행

Emissary에는 모든 것을 실행하는 bash 스크립트가 하나 있습니다. Emissary 최상위 디렉토리에 있습니다. 이 스크립트는 다양한 기능을 처리하기 위해 여러 Picocli 명령이 있는 emissary.Emissary 클래스를 실행합니다.

인수 없음

emissary 스크립트가 인수 없이 실행되면 모든 구성 하위 명령 목록과 간단한 설명이 표시됩니다.

root@kitploit:~
./emissary

도움말

./emissary help를 실행하면 인수 없이 실행할 때와 동일한 출력이 표시됩니다. 명령에 대한 더 자세한 정보를 보려면 help 뒤에 명령 이름을 추가하십시오. 예를 들어, server 명령에 대한 설명이 포함된 모든 인수를 보려면 다음을 실행하십시오:

root@kitploit:~
./emissary help server

공통 매개변수

나머지 명령에는 모두 설정할 수 있는 (-b 또는 --projectBase) 인수가 있지만 PROJECT_BASE와 일치해야 합니다.

구성 디렉토리는 기본적으로 /config로 설정되지만 *(-c 또는 --config)*로 전달할 수도 있습니다. git 체크아웃에서 실행할 때는 target을 projectBase로 사용해야 합니다. 시작하기 전에 target/config의 구성 파일을 자유롭게 수정하십시오.

로깅은 logback으로 처리됩니다. --logbackConfig 인수로 사용자 지정 파일을 지정할 수 있습니다.

각 명령에 대한 자세한 정보는 *help -c *를 참조하십시오.

서버 (독립 실행형)

이 명령은 Emissary 서버를 시작하고 구성된 모든 place, pickup place 및 drop off 필터를 초기화합니다. -m 또는 --mode가 지정되지 않으면 독립 실행형 모드로 시작됩니다. 기본적으로 MobileAgent 수는 시스템 사양에 따라 계산됩니다. 최신 컴퓨터에서는 이 수가 높을 수 있습니다. -a 또는 --agents로 에이전트 수를 제어할 수 있습니다. 예시 실행은 다음과 같습니다.

root@kitploit:~
./emissary server -a 2

추가 구성 없이 http://localhost:8001에서 시작됩니다. 해당 URL을 탐색하면 target/config/jetty-users.properties에 정의된 사용자 이름과 비밀번호(emissary 및 emissary123)를 입력해야 합니다.

기본 PickUpPlace는 _target/data/InputData_에서 파일을 읽도록 구성되어 있습니다. 해당 디렉토리에 파일을 복사하면 Emissary가 처리하는 것을 볼 수 있습니다. toUpper와 toLower만 구성되어 있으므로 출력은 그다지 흥미롭지 않을 것입니다.

일시 중지

서비스가 작업을 수행하지 못하도록 중지합니다.

root@kitploit:~
./emissary server --pause
일시 중지 해제

일시 중지된 서비스가 작업을 수행하도록 허용합니다.

root@kitploit:~
./emissary server --unpause
무효화

새로 고칠 수 있는 서비스를 무효화합니다. 이는 ServiceProviderRefreshablePlace를 무효화하는 무중단 방식의 "가벼운" 새로 고침입니다. place가 DirectoryPlace에서 가져와지면 동일한 키로 DirectoryPlace 및 Namespace에 대해 place가 다시 생성되지만 구성 로더가 다시 로드되고 place는 구성의 하위 집합을 다시 로드할 수 있습니다.

root@kitploit:~
./emissary server --invalidate
새로 고침

서비스의 강제 새로 고침을 수행합니다. 이는 "하드" 새로 고침으로, 서버가 일시 중지되고 MobileAgent가 모두 소진될 때까지 대기합니다. 서버가 완전히 유휴 상태가 되면 모든 ServiceProviderRefreshablePlace 기존 키가 DirectoryPlace 및 Namespace에서 제거되고 place가 완전히 다시 생성됩니다. 이를 통해 서비스 이름, 프록시, 거부 목록 등의 변경이 가능합니다. 그런 다음 서버가 일시 중지 해제되어 처리를 재개합니다. 새로 고침 중 오류가 발생하면 서버가 잘못된 상태가 될 수 있으므로 서버가 종료됩니다.

root@kitploit:~
./emissary server --refresh
중지

서비스를 종료합니다.

root@kitploit:~
./emissary server --stop
강제 종료

서비스를 강제로 종료합니다.

root@kitploit:~
./emissary server --kill

에이전트 (독립 실행형)

agents 명령은 구성된 호스트의 MobileAgent 수와 해당 에이전트가 수행 중인 작업을 표시합니다. 기본적으로 포트는 9001이지만 -p 또는 --port로 변경할 수 있습니다. 위의 server 명령에서 8001에서 실행 중이라고 가정하고 다음을 시도하십시오:

root@kitploit:~
./emissary agents -p 8001

풀 (독립 실행형)

Pool은 노드의 에이전트를 축약된 보기로 표시합니다. 역시 기본적으로 포트 9001을 사용합니다. 위에서 시작한 독립 실행형 서버에 대해 실행하려면 다음을 실행하십시오.

root@kitploit:~
./emissary pool -p 8001

이 명령은 모든 노드에 대한 더 이해하기 쉬운 보기를 제공하므로 클러스터에서 더 유용합니다.

환경

Env 명령은 실행 중인 서버가 필요합니다. 서버에 PROJECT_BASE 및 BIN_DIR과 같은 일부 구성 값을 요청합니다. 인수 없이 실행하면 형식화되지 않은 json 응답을 덤프합니다.

root@kitploit:~
./emissary env

하지만 bash에서 소싱하기에 적합한 응답을 덤프할 수도 있습니다.

root@kitploit:~
./emissary env --bashable

Emissary 서버를 시작하면 실제로 이 엔드포인트를 호출하고 구성된 변수로 $PROJECT_BASE}/env.sh를 덤프합니다. 이는 셸 스크립트가 source $PROJECT_BASE}/env.sh를 수행한 다음 다른 곳에서 구성할 필요 없이 해당 변수를 사용할 수 있도록 하기 위한 것입니다.

구성

config 명령은 지정된 place/서비스/클래스에 대한 유효 구성을 볼 수 있게 해줍니다. Emissary는 flavor를 사용하므로 이 명령은 모든 flavor가 적용된 후 클래스의 결과 구성을 표시합니다. 이 명령은 -h로 호스트(기본값은 localhost)를, -p로 포트(기본값은 8001)를 지정하여 실행 중인 Emissary 노드에 연결하는 데 사용할 수 있습니다. 포트 8001에서 로컬로 실행 중인 Emissary에 연결하려면 다음 명령 중 하나가 작동합니다:

root@kitploit:~
./emissary config --place emissary.place.sample.ToLowerPlace
./emissary config --place emissary.place.sample.ToLowerPlace -h localhost -p 8001

선택적으로 --offline을 사용하여 로컬 CONFIG_DIR에 지정된 구성 파일을 사용하는 오프라인 모드를 지정할 수 있습니다:

root@kitploit:~
./emissary config --place emissary.place.sample.ToLowerPlace --offline

오프라인 모드에서는 flavor를 제공하여 구성의 차이를 확인할 수 있습니다:

root@kitploit:~
./emissary config --place emissary.place.sample.ToLowerPlace --offline --flavor STANDALONE,TESTING

이러한 명령은 유효 구성을 확인하는 데 유용하지만, 모든 구성 파일과 최종 출력을 볼 수 있는 상세 모드로 실행할 수도 있습니다. 이는 --detailed 플래그로 제어됩니다:

root@kitploit:~
./emissary config --place emissary.place.sample.ToLowerPlace --detailed

또는 오프라인 모드에서:

root@kitploit:~
./emissary config --place emissary.place.sample.ToLowerPlace --offline --detailed

서버 (클러스터)

Emissary는 독립 실행형에서도 재미있지만 실제 작업에는 클러스터 실행이 더 적합합니다. 클러스터 방식은 독립 실행형과 유사하지만 노드가 다른 노드에 연결하도록 -m cluster를 지정해야 합니다. 클러스터 모드에서 Emissary는 PickUpPlace 대신 PickUpClient도 시작하므로 피더를 시작해야 합니다.

target/config/peers.cfg를 확인하여 rendezvous 피어를 확인하십시오. 이 경우 3개가 있습니다. 포트 8001 및 9001에서 실행되는 노드는 Emissary 노드일 뿐입니다. 포트 7001에서 실행되는 노드는 피더입니다. 두 개의 다른 터미널에서 8001과 9001을 시작해 보겠습니다.

root@kitploit:~
./emissary server -a 2 -m cluster
./emissary server -a 2 -m cluster -p 9001

이 노드들은 모두 포트 8001, 9001 및 7001을 알고 있으므로 계속 연결을 시도하면서 로그에 오류가 표시될 것입니다.

참고: 실제 배포에서는 동일한 노드에서 여러 Emissary 프로세스를 실행하지 않습니다. -h로 호스트 이름을 구성할 수 있습니다.

피드 (클러스터)

포트 8001과 9001에서 노드가 시작된 상태에서 피더를 시작해야 합니다. feed 명령은 기본적으로 포트 7001을 사용하지만 피더가 읽을 디렉토리를 설정해야 합니다. 해당 디렉토리에 놓인 파일은 작업자 노드가 가져갈 수 있으며 작업은 클러스터 전체에 분산되어야 합니다. 다음으로 피드를 시작하십시오.

root@kitploit:~
mkdir ~/Desktop/feed1
./emissary feed -i ~/Desktop/feed1/

브라우저에서 http://localhost:8001, http://localhost:9001 및 http://localhost:7001에 접속하여 구성된 place를 확인할 수 있어야 합니다. ~/Desktop/feed1에 일부 파일을 넣고 2개 노드가 처리하는 것을 확인하십시오. 처리를 시작하는 데 1분 정도 걸릴 수 있습니다.

에이전트 (클러스터)

클러스터 모드의 에이전트는 다시 mobileAgent에 대한 세부 정보를 표시합니다. 구성한 노드(기본적으로 localhost:9001)에서 시작한 다음 알고 있는 모든 노드를 호출하여 동일한 정보를 가져옵니다. 다음으로 실행하십시오:

root@kitploit:~
./emissary agents --cluster

풀 (클러스터)

클러스터 모드의 풀도 독립 실행형의 풀과 동일한 작업을 수행합니다. 기본적으로 노드(localhost:9001)에서 시작한 다음 알고 있는 모든 노드로 이동하여 클러스터의 축약된 보기를 집계합니다. 다음으로 실행하십시오.

root@kitploit:~
./emissary pool --cluster

토폴로지 (클러스터)

토폴로지는 구성된 노드(기본적으로 localhost:8001)와 통신하고 알고 있는 모든 노드와 통신합니다. 응답은 해당 노드들이 알고 있는 모든 정보이므로 클러스터의 네트워크 토폴로지를 구축할 수 있습니다. 다음으로 실행하십시오.

root@kitploit:~
./emissary topology

SSL로 서버 실행

키 저장소와 키 저장소 비밀번호는 emissary.client.EmissaryClient-SSL.cfg 파일에 있습니다. 기본적으로 포함되고 구성된 샘플 키 저장소는 이 기능을 테스트하는 데 사용할 수 있습니다. 프로덕션 환경에서는 샘플 키 저장소를 사용하지 않는 것이 좋습니다. 자체 키 저장소를 사용하려면 emissary.client.EmissaryClient-SSL.cfg 파일의 구성 값을 변경하십시오.

독립 실행형

root@kitploit:~
./emissary server -p 8443 --ssl --disableSniHostCheck

클러스터

root@kitploit:~
./emissary server -p 8443 --ssl --disableSniHostCheck --mode cluster
./emissary server -p 9443 --ssl --disableSniHostCheck --mode cluster
mkdir ~/Desktop/feed1
./emissary feed -p 7443 --ssl --disableSniHostCheck -i ~/Desktop/feed1/

문의하기

일반 질문

이 프로젝트에 대한 질문이나 우려 사항이 있으면 다음 주소로 문의하십시오: [email protected]

보안 질문

보안 질문 및 취약점 보고는 SECURITY.md를 참조하십시오.

도구 다운로드