Gitea Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gitea는 자체 호스팅되는 커뮤니티 관리 경량 코드 호스팅 솔루션으로 Go로 작성되었습니다.
Gitea 인스턴스를 로컬에서 실행하려면 도커 컨테이너를 실행하면 됩니다:
포트 3000에 연결하여 웹 페이지에 접근하세요.
Kubernetes로 실행할 수도 있습니다:
등록된 사용자: http://localhost:3000/explore/users
기본적으로 Gitea는 새로운 사용자가 등록하는 것을 허용합니다. 이는 새로운 사용자에게 다른 조직/사용자 저장소에 대한 특별히 흥미로운 접근을 제공하지 않지만, 로그인한 사용자는 더 많은 저장소나 조직을 시각화할 수 있습니다.
이 시나리오에서는 github 계정에 대한 일부 접근 권한을 얻었다고 가정합니다.
조직 내의 사용자에 대한 자격 증명을 이미 가지고 있거나 (세션 쿠키를 훔쳤다면) 그냥 로그인하여 어떤 권한이 있는지 확인할 수 있습니다. 어떤 저장소에서, 어떤 팀에 있는지, 다른 사용자 목록 및 저장소가 어떻게 보호되는지를 확인할 수 있습니다.
2FA가 사용될 수 있으므로 해당 정보를 얻으려면 그 검사를 통과해야만 합니다.
i_like_gitea
쿠키를 훔치는 데 성공하면 (현재 SameSite: Lax로 구성됨) 자격 증명이나 2FA 없이 사용자를 완전히 가장할 수 있습니다.
Gitea는 사용자가 **코드를 배포하기 위한 인증 방법으로 사용할 SSH 키를 설정할 수 있도록 허용합니다 (2FA가 적용되지 않음).
이 키를 사용하여 사용자가 일부 권한을 가진 저장소에서 변경을 수행할 수 있지만, gitea API에 접근하여 환경을 열거하는 데 사용할 수는 없습니다. 그러나 로컬 설정을 열거하여 접근할 수 있는 저장소 및 사용자에 대한 정보를 얻을 수 있습니다:
사용자가 자신의 gitea 사용자 이름으로 사용자 이름을 구성한 경우, _https://github.com/<gitea_username>.keys_에서 그가 설정한 공개 키에 접근할 수 있으며, 이를 확인하여 발견한 개인 키를 사용할 수 있는지 확인할 수 있습니다.
SSH 키는 배포 키로 저장소에 설정할 수도 있습니다. 이 키에 접근할 수 있는 사람은 저장소에서 프로젝트를 시작할 수 있습니다. 일반적으로 서로 다른 배포 키가 있는 서버에서는 로컬 파일 **~/.ssh/config
**가 키와 관련된 정보를 제공합니다.
여기에서 설명한 바와 같이, 때때로 커밋에 서명해야 하거나 발견될 수 있습니다.
현재 사용자가 어떤 키를 가지고 있는지 로컬에서 확인하십시오:
사용자 토큰에 대한 기본 정보를 확인하여 소개를 참조하세요.
사용자 토큰은 Gitea 서버에 인증하기 위해 비밀번호 대신 사용할 수 있으며 API를 통해. 사용자에 대한 완전한 접근 권한을 가집니다.
Gitea Oauth 애플리케이션에 대한 기본 정보를 확인하여 소개를 참조하세요.
공격자는 악성 Oauth 애플리케이션을 생성하여 피싱 캠페인의 일환으로 이를 수락하는 사용자들의 권한 있는 데이터/작업에 접근할 수 있습니다.
기본 정보에서 설명한 바와 같이, 애플리케이션은 사용자 계정에 대한 전체 접근 권한을 가집니다.
Github에서는 기본적으로 쓰기 접근 권한이 있는 토큰을 얻는 github actions가 있어 브랜치 보호를 우회하는 데 사용할 수 있습니다. 이 경우 존재하지 않으므로, 우회는 더 제한적입니다. 하지만 어떤 작업을 할 수 있는지 살펴보겠습니다:
푸시 활성화: 쓰기 접근 권한이 있는 사람이 브랜치에 푸시할 수 있다면, 그냥 푸시하세요.
제한된 푸시 화이트리스트: 이 목록의 일원이라면 브랜치에 푸시하세요.
병합 화이트리스트 활성화: 병합 화이트리스트가 있다면, 그 안에 있어야 합니다.
승인 요구가 0보다 큼: 그러면... 다른 사용자를 타협해야 합니다.
화이트리스트에 승인 제한: 화이트리스트에 있는 사용자만 승인할 수 있다면... 그 목록에 있는 다른 사용자를 타협해야 합니다.
오래된 승인 무효화: 새로운 커밋으로 승인이 제거되지 않으면, 이미 승인된 PR을 탈취하여 코드를 주입하고 PR을 병합할 수 있습니다.
조직/레포 관리자라면 보호를 우회할 수 있습니다.
웹훅은 특정 Gitea 정보를 일부 장소로 전송할 수 있습니다. 이 통신을 악용할 수 있습니다. 그러나 일반적으로 비밀이 웹훅에 설정되어 있어 URL을 아는 외부 사용자가 비밀을 모르면 웹훅을 악용할 수 없습니다. 하지만 어떤 경우에는 사람들이 비밀을 제자리에 설정하는 대신 URL에 매개변수로 설정하기 때문에, URL을 확인하면 비밀과 추가로 악용할 수 있는 다른 장소를 찾을 수 있습니다.
웹훅은 레포 및 조직 수준에서 설정할 수 있습니다.
어떻게든 Gitea가 실행되고 있는 서버에 들어갔다면 Gitea 구성 파일을 검색해야 합니다. 기본적으로 /data/gitea/conf/app.ini
에 위치합니다.
이 파일에서 키와 비밀번호를 찾을 수 있습니다.
Gitea 경로(기본값: /data/gitea)에서도 다음과 같은 흥미로운 정보를 찾을 수 있습니다:
sqlite DB: Gitea가 외부 DB를 사용하지 않는 경우 sqlite DB를 사용합니다.
세션: 세션 폴더 내에서 cat sessions/*/*/*
를 실행하면 로그인한 사용자의 사용자 이름을 볼 수 있습니다 (Gitea는 세션을 DB에 저장할 수도 있습니다).
jwt 개인 키: jwt 폴더 내에 있습니다.
이 폴더에서 더 많은 민감한 정보를 찾을 수 있습니다.
서버 내부에 있다면 gitea
바이너리를 사용하여 정보를 접근/수정할 수 있습니다:
gitea dump
는 Gitea를 덤프하고 .zip 파일을 생성합니다.
gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET
는 지정된 유형의 토큰을 생성합니다 (지속성).
gitea admin user change-password --username admin --password newpassword
비밀번호를 변경합니다.
gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token
새 관리자 사용자를 생성하고 접근 토큰을 받습니다.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)