Direct and indirect passes are lighting passes. You literally add them to add light to your pixels. That light can be either white or colored light and it may hold intensity values well above 1, as they are scene values.
These passes contain the information of light coming from the light sources of your scene and interacting with surfaces (glossy, diffuse, etc.) both directly and indirectly (via bounces).
In real life, the colour of materials is actually a factor of absorption of wavelenghts, creating the ilusion of colour when those materials interact with light.
In a CG scene, when you light a red surface, it absorbs blue and green components (a part of the spectrum) from your light source and bounce back red.
This absorption can be expressed mathematically with a multiplication, hence why you multiply the lighting passes by the shader base colour to retrieve the appearance of the lit surface.
The multiplication of an RGB image by colour sort of mimics the behavior of a colored glass: It lets a part of the spectrum pass (the colour of the glass) and blocks the other parts.
As Carlo mentioned, producing your own test scene will clear up your doubts. Go try yourself and inspect the passes with a viewer node, it will show what information each pass has and it will make sense.