Change signature verification to ignore signatures with invalid host (#13033)
Instead of returning a signature verification error, pretend there was no signature (i.e., this does not allow access to resources that need a valid signature), so public resources can still be fetched Fix #13011
This commit is contained in:
		
							parent
							
								
									62f0b30617
								
							
						
					
					
						commit
						5265df0a8a
					
				
					 2 changed files with 29 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -160,6 +160,8 @@ module SignatureVerification
 | 
			
		|||
      account ||= stoplight_wrap_request { ActivityPub::FetchRemoteKeyService.new.call(key_id, id: false) }
 | 
			
		||||
      account
 | 
			
		||||
    end
 | 
			
		||||
  rescue Mastodon::HostValidationError
 | 
			
		||||
    nil
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def stoplight_wrap_request(&block)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -97,6 +97,33 @@ describe ApplicationController, type: :controller do
 | 
			
		|||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'with inaccessible key' do
 | 
			
		||||
      before do
 | 
			
		||||
        get :success
 | 
			
		||||
 | 
			
		||||
        author = Fabricate(:account, domain: 'localhost:5000', uri: 'http://localhost:5000/actor')
 | 
			
		||||
        fake_request = Request.new(:get, request.url)
 | 
			
		||||
        fake_request.on_behalf_of(author)
 | 
			
		||||
        author.destroy
 | 
			
		||||
 | 
			
		||||
        request.headers.merge!(fake_request.headers)
 | 
			
		||||
 | 
			
		||||
        stub_request(:get, 'http://localhost:5000/actor#main-key').to_raise(Mastodon::HostValidationError)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe '#signed_request?' do
 | 
			
		||||
        it 'returns true' do
 | 
			
		||||
          expect(controller.signed_request?).to be true
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe '#signed_request_account' do
 | 
			
		||||
        it 'returns nil' do
 | 
			
		||||
          expect(controller.signed_request_account).to be_nil
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'with body' do
 | 
			
		||||
      before do
 | 
			
		||||
        post :success, body: 'Hello world'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue