In the original paper makes it clear that the nearest neighbours are from the minority class, so it appears that Liu et al. are mistaken.

[![enter image description here][1]][1]

Having said which, I am not sure the paper is entirely consistent with most implementations (or indeed itself)

[![enter image description here][2]][2] 

I think for the synthetic point to be on a line joining the selected minority point with it's nearest neighbour, $gap$ would have to be assigned outside the loop over attributes, not inside it.

BTW if you are using a modern classifier, such as an SVM, that can implement cost-sensitive learning and has a good means of avoiding overfitting, then I would advise against using SMOTE.  Techniques such as regularisation have a lot of solid theory behind them, the method used by SMOTE has none.  I would also advise using a probabilistic classifier for problems with unequal misclassification costs etc. as you can account for the misclassification costs after the model has been fitted to the data.


  [1]: https://i.sstatic.net/kdVU7.png
  [2]: https://i.sstatic.net/hF7GL.png